1์ฅ. ๋์์ธ ํจํด ์๊ฐ์ ์ ๋ต ํจํด
๋์์ธ ์์น (๊ฐ์ฒด์งํฅ ์์น)
์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฌ๋ผ์ง๋ ๋ถ๋ถ์ ์ฐพ์๋ด๊ณ , ๋ฌ๋ผ์ง์ง ์๋ ๋ถ๋ถ๊ณผ ๋ถ๋ฆฌ(์บก์ํ)ํ๋ค.
์ฝ๋์ ์๋ก์ด ์๊ตฌ ์ฌํญ์ด ์์ ๋๋ง๋ค ๋ฐ๋๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋ถ๋ฆฌํด์ผ ํ๋ค.
์์คํ
์ ์ ์ฐ์ฑ์ ํฅ์์ํจ๋ค.
๊ตฌํ๋ณด๋ค๋ ์ธํฐํ์ด์ค์ ๋ง์ถฐ์ ํ๋ก๊ทธ๋๋ฐํ๋ค.
์ธํฐํ์ด์ค์ ๋ง์ถฐ์ ํ๋ก๊ทธ๋๋ฐ = ์์ ํ์(supertype)์ ๋ง์ถฐ์ ํ๋ก๊ทธ๋๋ฐ
๋งค์๋๋ฅผ ํ์ ํด๋์ค์์ ์ง์ ๊ตฌํํ๊ธฐ๋ณด๋ค ์์ ํ์์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ , ๋งค์๋ ํ์์ ๋ง์ถฐ์ ํ๋ก๊ทธ๋๋ฐํ๋ค.
์ฌ๊ธฐ์ ์์ ํ์์ ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ๊ณผ์ (์๋ฅผ ๋ค์ด new Dog()
)์ ์ถ์ํํ๊ณ ์คํ์์ ๋์
ํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์์๋ณด๋ค๋ ๊ตฌ์ฑ(composition)์ ํ์ฉํ๋ค.
์ ์ฐ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ค.
(React์์๋ ๊ฐ์ ์ด์ ?)
๋์์ธ ํจํด ์ฌ์ฉ๋ฒ
์ด๋ฏธ ์๋ก ์๊ณ ์๋ ํจํด์ ํตํด ์ปค๋ฎค๋์ผ์ด์
์๋๋ฅผ ํฌ๊ฒ ๋์ผ ์ ์๋ค.
ํจํด์ ์ฌ์ฉํ์ฌ ๋์์ธ ์์ค์ ์ด์ ์ ๋ง์ถ ์ ์๋ค.
๋์์ธ ํจํด์ด ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํด์ ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ฉด, ๊ฐ๋ฐ์๋ ํน์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๊ฒ ๋์์ธ์ ์ ์ฉํ๋ ์ญํ ์ ํ๋ค.
๋์์ธ ํจํด์ ํ๋ ์์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ๋์ ๋จ๊ณ์ ๊ฐ๋
์ด๋ค.
๊ฐ์ฒด์งํฅ ์์คํ
๊ตฌ์ถ ๋ฐฉ๋ฒ์ ๋ชจ์์ ๋ง๋ ๊ฒ์ด ๋์์ธ ํจํด์ด๋ค.
๋์์ธ ํจํด์ ์ฐพ์ ์ ์๋ค๋ฉด ๊ฐ์ฒด์งํฅ ์์น(์ถ์ํ, ์บก์ํ, ๋คํ์ฑ ๋ฑ)์ ์๊ฐํ๋ ๊ฒ์ด ๋์์ด ๋๋ค.
์ ๋ต ํจํด (Strategy Pattern)
์๊ณ ๋ฆฌ์ฆ๊ตฐ์ ์ ์ํ๊ณ ์บก์ํํด์ ๊ฐ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ๊ตฐ์ ์์ ํด์ ์ธ ์ ์๊ฒ ํด์ค๋ค.
์ ๋ต ํจํด์ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ถ๋ฆฌํด์ ๋
๋ฆฝ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
์ต์ ๋ฒ ํจํด(oberver pattern): ํ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ฐ๋๋ฉด ๊ทธ ๊ฐ์ฒด์ ์์กดํ๋ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์ฐ๋ฝ์ด ๊ฐ๊ณ ์๋์ผ๋ก ๋ด์ฉ์ด ๊ฐฑ์ ๋๋ ๋ฐฉ์์ผ๋ก, ์ผ๋๋ค ์์กด์ฑ์ ์ ์ํ๋ค.
์ฃผ์ (subject): ์ํ(๋ฐ์ดํฐ)๋ฅผ ์ ์ฅํ๊ณ ์๋ ๊ฐ์ฒด
์ต์ ๋ฒ(observer): ์ํ ๋ณํ๊ฐ ์ผ์ด๋ ๋๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๊ฐ์ฒด
๋์จํ ๊ฒฐํฉ(loose coupling): ๊ฐ์ฒด๋ค์ด ์ํธ์์ฉํ ์๋ ์์ง๋ง ์๋ก๋ฅผ ์ ๋ชจ๋ฅด๋ ๊ด๊ณ.
publish-scribe pattern: ์๋ก ๋ค๋ฅธ ์ ํ์ ๋ฉ์ธ์ง์ ๊ด์ฌ์ ๊ฐ์ง ์ ์๊ณ , ์ญํ ์ ๋ ์ธ์ธํ๊ฒ ๋ถ๋ฆฌํ ์ ์๋ ํจํด์ผ๋ก, ๋ฏธ๋ค์จ์ด ์์คํ
์์ ๋ง์ด ์ฐ์ธ๋ค.
ํธ์ ๋ฐฉ์๊ณผ ํ ๋ฐฉ์
ํธ์ ๋ฐฉ์: ์ฃผ์ ๊ฐ ์ต์ ๋ฒ์๊ฒ ์ํ๋ฅผ ์๋ฆฌ๋ ๋ฐฉ์
public void update (float temperature , float humidity , float pressure ) {
this .temperature = temperature ;
this .humidity = humidity ;
display ();
}
ํ ๋ฐฉ์: ์ฃผ์ ์์ ์ต์ ๋ฒ๊ฐ ์ํ๋ฅผ ๋์ด์ค๋ ๋ฐฉ์
public void update () {
this .temperature = weatherData .getTemperature ();
this .humidity = weatherData .getHumidity ();
display ();
}
3์ฅ. ๋ฐ์ฝ๋ ์ดํฐ ํจํด
๋ฐ์ฝ๋ ์ดํฐ ํจํด์ ์ฌ์ฉํด์ ์๋ธํด๋์ค๋ฅผ ๋ง๋๋ ๊ฒ๋ณด๋ค ์ ์ฐํ๊ฒ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๋ค.
๊ธฐ๋ณธ ๊ตฌ์ฑ ์์์๋ ๋ค๋ฅธ ๋ฐ์ฝ๋ ์ดํฐ ๋ฑ์ ์ธ์คํด์ค ๋ณ์์ ์ ์ฅํ์ฌ ์ฐ๊ฒฐํ๋ค.
ํ์ํ ์ฝ๋์ ํด๋์ค๊ฐ ๋ง์์ง๋ค๋ ๋จ์ ์ ํฉํ ๋ฆฌ ๋ฐ ๋น๋ ํจํด์ผ๋ก ๋ณด์ํ๋ค.
ํ๋์ ์ธ์คํด์ค๋ง ๋ง๋ค๊ณ , ๊ทธ ์ธ์คํด์ค๋ก์ ์ ์ญ ์ ๊ทผ์ ์ ๊ณตํ ๋ ์ฌ์ฉํ๋ค.
์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , getInstance
์ ์ด ์ธ์คํด์ค์ ๊ฐ์ด ์ ๊ทผํ ์ ์๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. getInstance
์์๋ ํธ์ถํ ๋๊น์ง ์ธ์คํด์ค ์์ฑ์ ๋ฏธ๋ฃฐ ์ ์๋ค. (lazy initialization)
๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ getInstance์ ๋์์ ์ ๊ทผํ๋ฉด, ์ธ์คํด์ค์ ์ ์ผ์ฑ์ ๋ณด์ฅํ ์ ์๋ค. (์๋ฐ ๊ธฐ์ค) ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
(๋ณ๋ชฉ์ ๊ฐ๋นํ ์ ์๋ค๋ฉด) ๋๊ธฐ์ ์ผ๋ก ์คํ๋๊ฒ ํ๋ค.
์ธ์คํด์ค๋ฅผ ์ ์ ์ผ๋ก ์ด๊ธฐํํ๊ณ lazy initialization์ ํ์ง ์๋๋ค.
DCL(Double-Checked Locking)์ ์ฌ์ฉํ๋ค.
Python ๋ฒ์ ...?
์ฐธ๊ณ
์์
์ ๊ฐ์ฒด๋ก ์บก์ํํ๊ณ , ์์
์ ์์ฒญํ๋ ๊ฐ์ฒด์ ์์
์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌ (์: ๋ฆฌ๋ชจ์ปจ์์ ์์
์ ์์ฒญํ๋ฉด ๊ฐ ๊ธฐ๊ธฐ์์ ์์
์ ์ฒ๋ฆฌ)
Command(์: ์์
) : ๊ณตํต ์์
์ธํฐํ์ด์ค, client๋ค์ ๋ฐ๋์ ์ด๋ฅผ ๊ตฌํ (์: execute, undo)
Client(์: ๊ธฐ๊ธฐ๋ค) : ์ํ๋ ํ๋๋ค๋ก ๊ตฌ์ฑ๋ ์ปค๋งจ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ invoker์ ๋๊ธฐ๊ธฐ (+ ๋์ค์ invoker์ ์ํด ์คํ๋จ)
Invoker(์: ๋ฆฌ๋ชจ์ปจ) : ์ปค๋งจ๋๋ฅผ ๋ฑ๋กํ๋ ๋ฉ์๋๋ฅผ ์ ๊ณต, ์ปค๋งจ๋์ ์คํ์ ์ ๋ฐ
7์ฅ. ์ด๋ํฐ ํจํด๊ณผ ํผ์ฌ๋ ํจํด
์ด๋ํฐ ํจํด
์ธํฐํ์ด์ค๊ฐ ํธํ๋์ง ์์ ์ฌ์ฉ๋ ์ ์์๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ด๋ํฐ ํด๋์ค๋ฅผ ๋์
๊ธฐ์กด ์ฝ๋๋ฅผ ํฌ๊ฒ ์์ ํ์ง ์์ ์ ์๋ค๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ์ฅ์
ํผ์ฌ๋ ํจํด
์๋ธ์์คํ
์ ์๋ ์ผ๋ จ์ ์ธํฐํ์ด์ค๋ฅผ ํตํฉ ์ธํฐํ์ด์ค๋ก ๋ฌถ์ด ์ฃผ๋ ํจํด
ํด๋ผ์ด์ธํธ๋ ํ๋์ ํตํฉ ์ธํฐํ์ด์ค์ ์ฐ๊ฒฐ๋๋ฉฐ, ํตํฉ ์ธํฐํ์ด์ค๋ (ํด๋ผ์ด์ธํธ ๋์ ) ๋ชจ๋ ์๋ธ์์คํ
์ ๊ด๋ฆฌ
์ต์ ์ง์ ์์น(๋ฐ๋ฉํ
๋ฅด์ ๋ฒ์น): ๊ฐ์ฒด ์์ฒด, ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ๊ฐ์ฒด, ๋ฉ์๋๋ฅผ ์์ฑํ๊ฑฐ๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ ๊ฐ์ฒด, ๊ฐ์ฒด์ ์ํ๋ ๊ตฌ์ฑ ์์์ ๋ฉ์๋๋ง ํธ์ถํ๋ผ๋ ๊ฐ์ด๋๋ผ์ธ
8์ฅ. ํ
ํ๋ฆฟ ๋ฉ์๋ ํจํด
์ํผํด๋์ค์ ํ
ํ๋ฆฟ ๋ฉ์๋๋ ์ฌ๋ฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํ๋ค.
ํ
ํ๋ฆฟ ๋ฉ์๋๋ ์ํผํด๋์ค์์ ์ง์ ์ ์ํ ๋ฉ์๋, ์ถ์ ๋ฉ์๋๋ก์ ์๋ธํด๋์ค์์ ๊ตฌํํ๋ ๋ฉ์๋, ํ
์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
ํ
(hook)์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฌด์ผ๋ ์ผ์ด๋์ง ์๋ ๋น ๋ฉ์๋์ง๋ง, ์๋ธํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ํ๋ค๋ฉด ํ
ํ๋ฆฟ ๋ฉ์๋์์ ํธ์ถํ๋ ๋ฉ์๋ ์ธ์ ๋์์ ๊ตฌํํ ์ ์๋ค.
์ด๋ก ์ ์ผ๋ก๋ ํด๋์ค ์์์ผ๋ก ๊ตฌํํด์ผ ํ์ง๋ง, (์ค๋ฆฌ ์ ๋ ฌ๊ณผ ๊ฐ์ด) ํด๋์ค ์์์ด ์๋ ๊ด๊ณ์์๋ ํ
ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ์์ด๋์ด๋ฅผ ํ์ฉํ ์ ์๋ค.
ํ ๋ฆฌ์ฐ๋ ์์น : ๊ณ ์์ค -> ์ ์์ค ๊ตฌ์ฑ ์์ ๋ฐฉํฅ์ผ๋ก๋ง ํธ์ถํ์ฌ ๊ณ ์์ค ๊ตฌ์ฑ ์์์ ์ ์์ค ๊ตฌ์ฑ ์์ ์ฌ์ด์ ์ํ ์์กด์ฑ์ด ์๊ธฐ์ง ์๊ฒ ํ๋ค.
9์ฅ. ๋ฐ๋ณต์ ํจํด๊ณผ ์ปดํฌ์งํธ ํจํด
๋ฐ๋ณต์(iterator) ํจํด: ์ฌ๋ฌ ์ปฌ๋ ์
(collection)์ด ๊ฐ์ ์ธํฐํ์ด์ค๋ก ์ํํ ์ ์๊ฒ ํจ - Python์ ์ธ์ด๋ฅผ ๋ง๋ค ๋ ์ด ํจํด์ ์ผ๋ค๊ณ ๋ณผ์๋ ์๋๊ฑด๊ฐ?
์ปดํฌ์งํธ(composite) ํจํด: ํธ๋ฆฌ ๊ตฌ์กฐ์์ composite์ leaf๋ ๊ฐ์ component ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ
์ปดํฌ์งํธ ํจํด์ ํฌ๋ช
์ฑ์ ์ํด ๋จ์ผ ์ญํ ์์น์ ์ด๋ ์ ๋ ํฌ์ํ๋ค๊ณ ๋ณผ ์๋ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋๊น์ง 'ํ๋'์ ์ญํ ์ด๋ผ๊ณ ํ ์ ์์๊น?
์ํ(state) ํด๋์ค๋ฅผ ์ ์ํ๊ณ ๋ชจ๋ ์ํ๋ ์ด ํด๋์ค๋ฅผ ๊ตฌํ
13์ฅ. ์ค์ ๋์์ธ ํจํด