GoF์ ๋์์ธ ํจํด, ๊ฐ๊ต ํจํด์ ๋ํด ์์๋ณธ๋ค.
ํด๋น ๊ธ์, ๋ค์์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ดํดํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
ํต์ฌ ์์ฝ
- ๊ธฐ๋ฅ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ๋ฅผ ํตํด ์์คํ ์ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ ํจํด
- ๊ธฐ์กด ์์คํ ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ ์ด๋ ํ ๋ณ๊ฒฝ๋ ์์ด ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค.
- ํน์ ์ํฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ ธ์ผ ํ๋ ๊ตฌํ์, ์ธ์์ ๊ฐ์ ํํ๋ก ๋ฐ์์ ๋์์ ์์ฒญํ์ฌ ํ์ฅ์ฑ์ ์ ๊ณ ํ๋ ๋ฐฉ๋ฒ
- ๋๊ฐ์ ๊ฐ๋ ์ด ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅ๋๋ฉด์ ์๋ก์๊ฒ ์ฐ๊ด์ด ์๋ ๊ฒฝ์ฐ ์๊ฐํด๋ณผ๋ง ํจ
์ค๋ช
- ๊ธฐ๋ฅ ๊ณ์ธต
- ์๋ก์ด ๊ธฐ๋ฅ์ ์ํ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์๋ ํด๋์ค๋ค
- ๊ตฌํ ๊ณ์ธต
- ์ด๋ฏธ ์ ํด์ง ์ธํผํ์ด์ค์ ๋ํ ๊ตฌํ ํด๋์ค๋ค
์ด ๋ ๊ณ์ธต ์ฌ์ด์ ๋ค๋ฆฌ๋ฅผ ๋๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ ํจํด์ ๊ฐ๊ต ํจํด์ด๋ผ ํ๋ค.
์์
์ฒซ๋ฒ์งธ
Draft
๋ ์์ง ์ถ๊ฐ๋์ง ์์ ๊ธ์ ๋งํจ- ํด๋น
Draft
๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํดDisplay
interface๋ฅผ ์ฑํํ๊ณ ์๋ ๊ตฌํ์ฒด๋ฅผ ๋ฐ์ Draft
๊ตฌํ์ฒด๋ ์ดDisplay
๊ตฌํ์ฒด์ ์์ฒญํ์ฌ ์ค์ง์ ์ผ๋ก ์ถ๋ ฅ์ ์์ฒญํจ- ๋ง์ฝ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด,
Display
๋ฅผ ์ฑํํ ๋ค๋ฅธ ๊ตฌํ์ฒด๋ฅผ ๋ฃ์ด๋ฒ๋ฆฌ๋ฉด ๋จ - ์ด๋ฌํ ์ ์์ ๊ตฌํ์ด ๋ ๋ฆฝ๋์ด ์๋ค๋ ์ ์ ์ ์ ์์
๋๋ฒ์งธ
- ์ด ์ํฉ์์ ์๊ตฌ์ฌํญ์ด ์ถ๊ฐ๋์์ ๋ ์ด๋ป๊ฒ ๋๋์ง ๋ณด์.
Publication
๊ฐ์ฒด๋Draft
๋ฅผ ์์๋ฐ์ ์ถํ์ฌ, ๊ฐ๊ฒฉ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ค.- ๊ทธ๋ฌ๋ฉด์ ๊ธฐ์กด์ Draft๊ฐ ๊ฐ์ง๋ ๊ธฐ๋ฅ์ ์ ์งํด์ผ ํ๋ค.
- Draft์ ๊ธฐ๋ฅ์ ํต์ฌ์ด๊ณ , ์ถ๊ฐ์ ์ผ๋ก ๋ฌ๋ผ๋ถ๋ ๊ฒ์ ๋ถ๊ฐ์ ์ด๋ผ ์๊ฐํด๋ณด์.
- ์ด๋ฐ ๊ฒฝ์ฐ, Draft์ ๋ง์ถฐ์ ธ ์๋ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ๋ ์ํ์์, ๋ถ๊ฐ์ ์ธ ๋ถ๋ถ๋ง ์ถ๋ ฅํ ๋ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๋ค๋ฅธ ์ด๋ฆ
- Handle/Body(ํธ๋ค/๊ตฌํ๋ถ)
๋๊ธฐ
- ํ๋์ ์ถ์์ ๊ฐ๋
(
Display
)์ด ์ฌ๋ฌ๊ฐ์ง ๊ตฌํ(SimpleDisplay
)์ผ๋ก ๋์ฌ ๊ฒฝ์ฐ ๋๋ถ๋ถ์ ์์์ ์ฌ์ฉํ๋ค. - ํ์ง๋ง ์์์ ์ถฉ๋ถํ ์ตํต์ฑ์ ๊ฐ์ง๊ธฐ ์ด๋ ต๋ค.
- ์์์ ๊ตฌํ๊ณผ ์ถ์์ ๊ฐ๋ ์ ์๊ตฌ์ ์ผ๋ก ์ข ์์ํค๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ถ์์ ๊ฐ๋ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ์ฌ ์์ , ํ์ฅํ๊ธฐ ์ด๋ ต๋ค.
- ํ๋ฉด์ ๋ค์ํ ์์๋ฅผ ๊ทธ๋ฆด ์ ์๋ Window ํด๋์ค๋ฅผ ์๊ฐํด๋ณด์.
- A, B, C ํ๋ซํผ ๋ชจ๋ ๊ฒฐ๊ตญ Window ํด๋์ค ๋ด๋ถ์์ ๊ทธ๋ฆฌ๊ณ ์ํ๋ ํ์๋ ๋์ผํ๋ค.
- ํ์ง๋ง ๊ตฌํ์ ๋ค๋ฅผ ์ ์๋ค.
- ์ด๋ฌํ ์ ์์ ์์์ ์ฌ์ฉํด๋ณด์.
- ์ด๊ธฐ
AWindow
,BWindow
,CWindow
๋ฅผ ๋ง๋๋๋ฐ๋ ํฐ ๋ฌธ์ ๊ฐ ์์๊ธด๋ค. - ๊ทธ๋ฐ๋ฐ, ๋ง์ฝ
IconWindow
๋ผ๋๊ฒ ์๊ฒผ๋ค. - ์ผ๋จ ์ด๋ ์๋ Window๋, Window๋ฅผ ์์ํด์ ๋ง๋ค์๋ค.
- ๊ทธ๋ฐ๋ฐ,
A
,B
๋ชจ๋์์ ์ฌ์ฉ๊ฐ๋ฅํด์ผ ํ๋ค๋ ์ ์ ๊นจ๋ฌ์๋ค. - ์ด๋ ๊ฒ ๋๋ฉด IconWindow๋ฅผ ์์ํด์ ๊ฐ๊ฐ์ ํ๋ซํผ์ ๋ง๋ ๊ตฌํ์ ์ฒ๋ฆฌํ ์ ๋ฐ์ ์๋ค.
IconWindow
์ด์ธ์ ๋ค๋ฅธ ๋ ์๋ค๋ ๋ง ์ถ๊ฐ๋๋ค๋ฉด ์ด๋จ๊น? ์ง์ฅ์ด ์์๋๋ค.- ์ฆ, ํน์ ํ ๊ตฌํ์ด ๋ฐ์ํ๋ค. ์ฝ๋๊ฐ ํ๋ซํผ์ ์ข ์๋๋ค.
- ์๋์ฐ ๊ตฌํ๋ง ์ข ์์ ์ด๋ฉด ๋๋๋ฐ, ๋๋จธ์ง ์ฝ๋๊น์ง ์ข ์๋๊ฒ ๋๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ, ๊ตฌํ์ฒด๋ฅผ ๋ฃ์ด ํด๊ฒฐํ๋ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋ค.
- ์ฆ, ์ผ์ชฝ์ ์์นํ ๊ธฐ๋ฅ ๊ณ์ธต์์๋ ๊ณตํต๋ ๊ธฐ๋ฅ์ ๋ํด ๋ฃ๊ณ ,
- ์ค์ง์ ์ผ๋ก ๋์์ ๊ตฌํ์ฒด๋ฅผ ๋ฃ์ด ๋์์ ๋๋ ค๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.
- ์ ๋ณด๋ฉด,
IconWindow
์ ๊ฒฝ์ฐDrawborder
๋ผ๋ ํจ์๊ฐ ์๋๋ฐ, ์ด ์ค์ง ๋์์ WindowImp
์ ๊ตฌํ์ฒด๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ๊ณ ์๋ค. ๊ฐ ํ๋ซํผ์ ๋ง๋ ๊ตฌํ์ฒด๋ฅผ ๋ฃ์ผ๋ฉด ๋๋๋ ๊ฒ์ด๋ค.- ์ฆ, ๊ฐ ํ๋ซํผ์ ๋ฐ๋ผ ๋ฌ๋ฆฌ ๋ง๋ค์ด์ ธ์ผ ํ๋ ๊ตฌํ ๋ถ๋ถ์
WindowImp
๋ก ์ถ์ํํ์ฌ ๋ถ๋ฆฌํจ์ผ๋ก์ ์ ์ฐ์ฑ์ ํ๋ณดํ๋ค.
ํ์ฉ์ฑ
- ์ถ์์ ๊ฐ๋
๊ณผ ๊ตฌํ ์ฌ์ด์ ์ง์์ ์ธ ์ข
์ ๊ด๊ณ๋ฅผ ํผํ๊ณ ์ถ์ ๋
- ๋ฐํ์์ ๊ตฌํ ๋ฐฉ๋ฒ์ ์ ํ (์์: Display ๋ฐฉ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ)
- ์ถ์์ ๊ฐ๋
๊ณผ ๊ตฌํ ๋ชจ๋๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ์๋ธ ํด๋์ฑ์ ํตํด ํ์ฅ๋์ด์ผ ํ ๋
- Window๋ ์๋ก์ด component ์ถ๊ฐ๋ฅผ ์ํด ํ์ฅ๋์ด์ผ ํจ
- ์๋ก์ด ํ๋ซํผ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ตฌํ์ด ํ์ํ์ฌ ํ์ฅํด์ผ ํจ
- ๊ฐ๊ฐ์ ๋ํด ๋ ๋ฆฝ์ ์ธ ํ์ฅ์ด ๊ฐ๋ฅ
- ์ถ์์ ๊ฐ๋
์ ๋ํ ๊ตฌํ ๋ด์ฉ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ค๋ฅธ ๊ด๋ จ ํ๋ก๊ทธ๋จ์ ์ํฅ์ ์ฃผ์ง ์์์ผ ํ ๋
Publication
์ด ์๊ธธ ๋, ๋ค๋ฅธ ๋ถ๋ถ์ ์ฝ๋ ๋ณ๊ฒฝ์ด ์์์
์ฐธ์ฌ์
- Abstraction(
Document
): ์ถ์์ ๊ฐ๋ ์ ๋ํ ์ธํฐํ์ด์ค ์ ๊ณต - RefinedAbstraction(
Draft
): ์ถ์์ ๊ฐ๋ ์ ๋ํ ์ธํฐํ์ด์ค ๊ตฌํ - Implementor(
Display
): ๊ตฌํ ํด๋์ค์ ๋ํ ์ธํฐํ์ด์ค ์ ๊ณต - Concreteimplementor(
SimpleDisplay
,CaptureDisplay
): Implementor ์ธํฐํ์ด์ค ๊ตฌํ, ์ค์ง์ ์ธ ๊ตฌํ ๋ด์ฉ
ํ๋ ฅ ๋ฐฉ๋ฒ
- Abstraction ํด๋์ค๊ฐ ์ฌ์ฉ์์ ์์ฒญ์ Implementor๊ฐ์ฒด์ ์ ๋ฌํ๋ค.
- ์์์ ๊ฒฝ์ฐ ์ธ์๋ก ๋ฐ์ ์์ฒญ์ ์ ๋ฌํ์
๊ฒฐ๊ณผ
- ์ธํฐํ์ด์ค์ ๊ตฌํ ๋ถ๋ฆฌ
- ์ด๋ค ๋ฐฉ์์ ๊ตฌํ์ ํํ ๊ฒ์ธ์ง ๋ฐํ์์ ๊ฒฐ์ ๊ฐ๋ฅ!
- ํ์ฅ์ฑ ์ ๊ณ
- Abstraction๊ณผ Implementor๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํ ์ ์๋ค.
- ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์ฌ์ฉ์์๊ฒ์ ์จ๊ธฐ๊ธฐ
๊ด๋ จ ํจํด๊ณผ ์ฐจ์ด์
- 03. Abstract Factory: ํน์ Bridge๋ฅผ ์์ฑํ๊ณ ๋ณตํฉํ ์ ์๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- 09. Adapter: ๊ด๋ จ ์๋ ํด๋์ค๋ค์ด ํจ๊ป ๋์ํ๊ฒ ํ๊ธฐ ์ํด ํนํ๋ ํจํด, ํด๋์ค ์ค๊ณ๊ฐ ๋๋๊ณ ์ฌ์ฉ๋จ
- 10. Bridge: ์ค๊ณ ์ด๊ธฐ ๋จ๊ณ์ ์ถ์ํ ๋ฐ ๊ตฌํ์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋ค์ํ๋๋๋ก ๋ง๋ค ๋ ์ฐ์ธ๋ค.