GoF์ ๋์์ธ ํจํด, ์ฅ์์ ํจํด์ ๋ํด ์์๋ณธ๋ค.
ํด๋น ๊ธ์, ๋ค์์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ดํดํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
ํต์ฌ ์์ฝ
- ๊ธฐ๋ฅ์ ๋ง์น ์ฅ์ ์ฒ๋ผ ๊ณ์ ์ถ๊ฐํ ์ ์๋ ํจํด
- ๊ธฐ๋ฅ์ ๋ฐํ์์ ๋์ ์ผ๋ก ๋ณ๊ฒฝ ๋๋ ํ์ฅํ ์ ์๋ ํจํด
- ์ฃผ์ด์ง ์ํฉ ๋ฐ ์ฉ๋์ ๋ฐ๋ผ ์ด๋ค ๊ฐ์ฒด์ ์ฑ ์์ ๋ง๋ถ์ด๋ ํจํด
- ๊ธฐ๋ฅ ํ์ฅ์ด ํ์ํ ๋ ์๋ธํด๋์ฑ ๋์ ์ธ ์ ์๋ ์ ์ฐํ ๋์์ด ๋ ์ ์์
- ๊ฒ์ ์บ๋ฆญํฐ์ ์ถ๊ฐ์ ์ธ ์ฅ๋น๋ฅผ ์ ํ๋๋ฅผ ์๊ฐํด๋ณด๋ฉด ์ข์ (๋ฐํ์์ ์บ๋ฆญํฐ ์ธ๊ด, ๋ฅ๋ ฅ์ด ๋ณ๊ฒฝ๋จ == ๊ธฐ๋ฅํ์ฅ)
์์
Strings
: ์ฅ์ํ ๋์์ด ๋๋ class. ๋ฌธ์์ด์ ์ฌ๋ฌ๊ฐ ๊ฐ์ง๊ณ ์์Decorator
: ์ฅ์์ ํ๋ interface- ์ฌ๊ธฐ์ ๋ณด๋ฉด,
Strings
์Decorator
๊ฐ ๊ฐ์Item
interface๋ฅผ ์์๋ฐ๋๋ก ํ์ฌ - ์๋ก ๋ค๋ฅธ ์๋๋ฅผ ๊ฐ์ง ๋ ํด๋์ค๋ฅผ ํ๋์ ๊ฐ๋ ์ผ๋ก ๋ค๋ฃฐ ์ ์๊ฒ ํ๋ค.
- ์ฆ, ์๋์ ๋ด์ฉ๋ฌผ(
String
)๊ณผ ์ฅ์(Decorator
)์ ๋ํ ๊ตฌ๋ถ์ ์์ ๋์ผํ๊ฒ ๋ค๋ฃฐ ์ ์๋ค. - ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฅ์์ ์ฅ์์ ๊ณ์ํด์ ๋ํ๋ ํจ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ์์ ์ฝ๋
// Strings
HI H.I.~!
I'm Wansook kun~!
I'm iOS Developer!
Design Pattern is not so good as much as before!
// Side Decorator
"HI H.I.~!"
"I'm Wansook kun~!"
"I'm iOS Developer!"
"Design Pattern is not so good as much as before!"
// Line Number Decorator
00: HI H.I.~!
01: I'm Wansook kun~!
02: I'm iOS Developer!
03: Design Pattern is not so good as much as before!
// Box Number Decorator
+------------------------------------------------+
|HI H.I.~! |
|I'm Wansook kun~! |
|I'm iOS Developer! |
|Design Pattern is not so good as much as before!|
+------------------------------------------------+
๋๊ธฐ
- ๋ด์ฉ์ ๋์ผํ ์ํ์์ ์ฅ์์ด ๊ณ์ํด์ ๋ฌ๋ผ๋ถ์ด์ผ ํ๋ ๊ฒฝ์ฐ
- ๊ฒ์ ์บ๋ฆญํฐ์ ์ฅ๋น ๋ฌ๊ธฐ
- ๋์ ์ผ๋ก ๊ธฐ๋ฅ์ ํ์ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ
- ์์์ ์ฌ์ฉํ์ง ์๊ณ ๊ธฐ๋ฅํ์ฅ์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
ํ์ฉ์ฑ
- ๋์ ์ผ๋ก ์ฑ ์ ์ถ๊ฐ ๊ฐ๋ฅ
- ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํฅ์ ์ฃผ์ง ์๊ณ ํ์ฅ ๊ฐ๋ฅ
- โ์ฅ์โ์ด๋ผ๋ ๋ง์ ๋ง๊ฒ, ์ ๊ฑฐ๋์ด๋ ๋ฌด๋ฐฉํ ์ฑ ์์ ์ถ๊ฐํด์ผ ํ ๋ ์ฌ์ฉ
- ์์์ผ๋ก ์๋ธํด๋์ฑํ๋ ๊ฒ์ด ์ค์ง์ ์ด์ง ๋ชปํ ๊ฒฝ์ฐ ์ฌ์ฉ
๊ตฌ์กฐ
์ฐธ์ฌ์
- Component(
Item
): ๋์ ์ผ๋ก ์ถ๊ฐํ ์๋น์ค๋ฅผ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฐ์ฒด๋ค์ ๋ํ ์ธํฐํ์ด์ค - ConcreteComponent(
Strings
): ์ค์ ๋ก ์ ์๋์ด์ผํ ํ์๊ฐ ์๋ ํด๋์ค - Decorator(
Decorator
): ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ์๋ฅผ ๊ด๋ฆฌํ๋ฉด์ Component์ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง์กฑํ๋๋ก ์ธํฐํ์ด์ค๋ฅผ ์ ์(?) - ConcreteDecorator(
BorderDecorator
,ScrollDecorator
): Component์ ์ ์ฉํ ์ฅ์์ ์ค์ ๋ก ๊ตฌํํ๋ ํด๋์ค
ํ๋ ฅ ๋ฐฉ๋ฒ
- Decorator ๋ด๋ถ์์ ์์ ์ด ๊ฐ์ง Component(
Item
)์ผ๋ก ๋จผ์ ์์ฒญ์ ์ ๋ฌํ๋ค.- ์ฆ, ๋จผ์ ๋ด๋ถ ์ปจํ ์ธ ์ ๋ํ ์์ ์ ๋๋ด๊ณ ๋ฐํ๋ฐ๋ ๊ฒ
- ์ดํ Decorator์์ ์ถ๊ฐ ์ฐ์ฐ์ ์ํํ๋ค.
๊ฒฐ๊ณผ
์ฅ์
- ์์๋ณด๋ค ์ค๊ณ์ ์ตํต์ฑ์ ๊ฐ์ง๋ค.
- ํ์ํ ๋๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค. ์ฆ, ์์ ํด๋์ค์ ๊ธฐ๋ฅ์ด ๋์ ๋๋ ๊ฒ์ ๋ง์ ์ ์๋ค.
- ์ฅ์์์ ๊ทธ ์ฅ์์์ ๊ตฌ์ฑ์์๊ฐ ๋์ผํ ํ์๋ ์๋ค.
- ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด,
- ๊ธฐ๋ณธ ๋ด์ฉ๋ฌผ(
Strings
)์ decorator๊ฐ 3๋ฒ ์ค์ฒฉ ์ ์ฉ๋์๋ค. - ์ด ๊ฒฝ์ฐ ๊ฐ๊ฐ์ decorator์๋
Item
์ด๋ผ๋ ๊ตฌ์ฑ์์๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ, - ์ด ๊ตฌ์ฑ์์๋ ๋ชจ๋ ๋ค๋ฅด๋ค.
- ์์์ decorator๋ฅผ
Item
์ผ๋ก ๋ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. - ์ฆ, ๋ด์ฉ๋ฌผ(
Strings
)์ ์ค์ decorator์item
๋ณ์์ ๋ด๊ธด ๊ฒ๊ณผ ๋์ผํ ํ์๊ฐ ์๋ค.
๋จ์
- ์์ ๊ท๋ชจ์ ๊ฐ์ฒด๋ค์ด ๋ง์ด ์๊ธด๋ค. ์์นซํ๋ฉด ์คํ๋ ค ์ดํด๊ฐ ์ด๋ ค์์ง ์ ์๋ค.
๊ด๋ จ ํจํด๊ณผ ์ฐจ์ด์
- ์ ์์(09. Adapter)
- ์ธํฐํ์ด์ค ๋ณ๊ฒฝ์ ์ฌ์ฉํ์์
- ์ด๋ ์์ ์ฑ ์๊ณผ ํ๋์ ๋ณํ์ํด
- ๋ณตํฉ์ฒด(11. Composite)
- ํ๋์ ๊ตฌ์ฑ์์๋ฅผ ๊ฐ์ง๋ ๋ณตํฉ์ฒด๋ก ๋ณผ ์ ์๋ค.
- ๋ค๋ง, ๊ฐ์ฒด ํฉ์ฑ์ด ์๋๊ณ ํ๋์ ์ถ๊ฐํ๋๋ฐ ๋ณด๋ค ๋ชฉ์ ์ด ์๋ค.
- ์ ๋ต(24. Strategy)
- ์ฅ์์: ๊ฒ๋ชจ์ ๋ณ๊ฒฝ
- ์ ๋ต: ๊ฐ์ฒด์ ๋ด๋ถ ๋ณํ