Design Pattern - ruthetum/study GitHub Wiki
- ํน์ ๋ฌธ๋งฅ์์ ๊ณตํต์ ์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํด ์ฐ์ด๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํด๊ฒฐ์ฑ
- ๋ชฉ์ ๋ณ๋ก ์ผ์ ํ ํจํด์ด ์ ์๋์ด ์์
- ์์ ํ ์ ๋ต์ด ๋๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฌ๋ฆฌ ํ์ฌ ์ํฉ์ ๋ง์ถฐ ์ต์ ํ๋ ํจํด์ ๊ฒฐ์ ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์
- ๋ํ์ ์ผ๋ก ๊ตฌ์ฒดํ๋ ๋์์ธ ํจํด์ GoF(Gang of Four)์์ ์ ์ํ 23๊ฐ์ ํจํด์ด ์์
- ๊ฐ๋ฐ์ ๊ฐ์ ์ํํ ํ์ ์ด ๊ฐ๋ฅ
- ์ํํธ์จ์ด์ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๊ธฐ ์ฉ์ดํจ
- ์ฌ์ฌ์ฉ์ ํตํด ๊ฐ๋ฐ ์๊ฐ ๋จ์ถ
- ์ค๊ณ ๋ณ๊ฒฝ์ด ์์ ๊ฒฝ์ฐ ๋น๊ต์ ์ํํ๊ฒ ์กฐ์น๊ฐ ๊ฐ๋ฅ
- ๊ฐ์ฒด์งํฅ์ ์ค๊ณ๋ฅผ ๊ณ ๋ คํ์ฌ ์งํํด์ผ ํจ
- ์ด๊ธฐ ํฌ์ ๋น์ฉ์ด ๋ง์ด ๋ค์ด๊ฐ
- ์์ฑ ํจํด, ๊ตฌ์กฐ ํจํด, ํ๋ ํจํด ์ด 3๊ฐ์ง๋ก ๊ตฌ๋ถ๋จ
- ๊ฐ ํจํด์ด ์ด๋ค ์์ ์ ์ํด ์์ฑ๋๋ ๊ฒ์ธ์ง์ ๋ฐ๋ฅธ ๊ตฌ๋ถ
์์ฑ ํจํด | ๊ตฌ์กฐ ํจํด | ํ๋ ํจํด |
---|---|---|
Abstract Factory Builder Factory Method Prototype Singleton |
Adapter Bridge Composite Decorator Facade Flyweight Proxy |
Chain of Responsibility Command Interpreter Iterator Mediator Memento Observer State Stratergy Template Method Visitor |
- ์์ฑ ํจํด์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ด๋ จ๋ ํจํด
- ํน์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋์ด๋ ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ์ ์ํฅ์ ์ต์ํํ ์ ์๋๋ก ์ ์ฐ์ฑ ์ ๊ณต
์์ฑ ํจํด | ์๋ |
---|---|
์ถ์ ํฉํ ๋ฆฌ(Abstract Factory) | ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ฅผ ์ง์ ํ์ง ์๊ณ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ฐ๊ด๋๋ ๊ฐ์ฒด๋ค์ ๋ณด์ฌ์ค |
๋น๋(Builder) | ๊ฐ์ฒด์ ์์ฑ๊ณผ ํํ์ ๋ถ๋ฆฌํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑ |
ํฉํ ๋ฆฌ ๋ฉ์๋(Factory Method) | ๊ฐ์ฒด ์์ฑ์ ์๋ธํด๋์ค๋ก ๋ถ๋ฆฌํ์ฌ ์์(์บก์ํ) |
ํ๋กํ ํ์ (Prototype) | ์๋ณธ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑ(ํด๋ก ) |
์ฑ๊ธํค(Singleton) | ํ ํด๋์ค๋ง๋ค ์ธ์คํด์ค๋ฅผ ํ๋๋ง ์์ฑํ์ฌ ์ด๋์๋ ์ฐธ์กฐ |
- ๊ตฌ์กฐ ํจํด์ ํ๋ก๊ทธ๋จ ๋ด ์๋ฃ ๊ตฌ์กฐ๋ ์ธํฐํ์ด์ค ๊ตฌ์กฐ ๋ฑ ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๋๋ฐ ์ฌ์ฉ๋๋ ํจํด
- ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์กฐํฉํ์ฌ ๋ ํฐ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ค
๊ตฌ์กฐ ํจํด | ์๋ |
---|---|
์ด๋ํฐ(Adapter) | ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ด๋ค ํด๋์ค์์๋ ์ด์ฉํ ์ ์๋๋ก ๋ณํ |
๋ธ๋ฆฌ์ง(Bridge) | ๊ตฌํ๋ถ์์ ์ถ์์ธต์ ๋ถ๋ฆฌํ์ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ณํํ๊ณ ํ์ฅํ ์ ์๋๋ก ํจ |
์ปดํฌ์งํธ(Composite) | ๊ฐ์ฒด๋ค์ ๊ด๊ณ๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํํํ๋ ๋ฐฉ์์ผ๋ก ๋ณตํฉ ๊ฐ์ฒด์ ๋จ์ผ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ์์ด ๋ค๋ฃธ |
๋ฐ์ฝ๋ ์ดํฐ(Decorator) | ์ฃผ์ด์ง ์ํฉ์ ๋ฐ๋ผ ๊ฐ์ฒด์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ง๋ถ์ |
ํ์ฌ๋(Facade) | ์๋ธ ์์คํ ์ ์๋ ์ธํฐํ์ด์ค ์งํฉ์ ๋ํด ํตํฉ๋ ์ธํฐํ์ด์ค ์ ๊ณต |
ํ๋ผ์ด์จ์ดํธ(Flyweight) | ํฌ๊ธฐ๊ฐ ์์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋งค๋ฒ ์์ฑํ์ง ์๊ณ ์ต๋ํ ๊ณต์ ํ์ฌ ์ฌ์ฉํ๋๋ก ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ |
ํ๋ก์(Proxy) | ์ค์ ๊ธฐ๋ฅ์ ์ํํ๋ ๊ฐ์ฒด ๋์ ๊ฐ์์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ๋ก์ง์ ํ๋ฆ์ ์ ์ด |
- ํ๋ ํจํด์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ค์ ์ปค๋ฎค๋์ผ์ด์ ์ ํจํดํ
- ๊ฐ์ฒด ์ฌ์ด์ ์๊ณ ๋ฆฌ์ฆ ๋๋ ์ฑ ์์ ๋ถ๋ฐฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ์๋จ
- ๊ฒฐํฉ๋๋ฅผ ์ต์ํํ๋ ๊ฒ์ด ์ฃผ ๋ชฉ์
ํ๋ ํจํด | ์๋ |
---|---|
์ฑ ์ ์ฐ์(Chain of Responsibility) | ์์ฒญ์ ๋ฐ๋ ๊ฐ์ฒด๋ฅผ ์ฐ์์ ์ผ๋ก ๋ฌถ์ด ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋๊น์ง ๊ฐ์ฒด Chain์ ๋ฐ๋ผ ์์ฒญ์ ์ ๋ฌ |
์ปค๋งจ๋(Command) | ์์ฒญ์ ๊ฐ์ฒด์ ํํ๋ก ์บก์ํํ์ฌ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ์ทจ์ |
์ธํฐํ๋ฆฌํฐ(Interpreter) | ํน์ ์ธ์ด์ ๋ฌธ๋ฒ ํํ์ ์ ์ |
๋ฐ๋ณต์(Iterator) | ์ปฌ๋ ์ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ ธ์ถํ์ง ์์ผ๋ฉด์ ๋ชจ๋ ํญ๋ชฉ์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณต |
์ค์ฌ์(Mediator) | ํ ์งํฉ์ ์ํด์๋ ๊ฐ์ฒด๋ค์ ์ํธ์์ฉ์ ์บก์ํํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ก ์ ์ |
๋ฉ๋ฉํ (Memento) | ๊ฐ์ฒด๊ฐ ํน์ ์ํ๋ก ๋ค์ ๋๋์์ฌ ์ ์๋๋ก ๋ด๋ถ ์ํ๋ฅผ ์ค์ ํ |
์ต์ ๋ฒ(Observer) | ๊ฐ์ฒด ์ํ๊ฐ ๋ณํ ๋ ๊ด๋ จ ๊ฐ์ฒด๋ค์ด ๊ทธ ๋ณํ๋ฅผ ์ ๋ฌ๋ฐ์ ์๋์ผ๋ก ์บ์ฑ |
์ํ(State) | ๊ฐ์ฒด์ ์ํ์ ๋ฐ๋ผ ๋์ผํ ๋์์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌ |
์ ๋ต(Stratergy) | ๋์ผ ๊ณ์ด์ ์๊ณ ๋ฆฌ์ฆ๊ตฐ์ ์ ์ํ๊ณ ์บก์ํํ์ฌ ์ํธ ๊ตํ์ด ๊ฐ๋ฅํ๊ฒ ํจ |
ํ ํ๋ฆฟ ๋ฉ์๋(Template Method) | ์์ ํด๋์ค๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ณจ๊ฒฉ๋ง์ ์์ฑํ๊ณ ๊ตฌ์ฒด์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์๋ธ ํด๋์ค๋ก ์์ |
๋ฐฉ๋ฌธ์(Visitor) | ๊ฐ์ฒด์ ์์์ ๋ํด ์ํํ ์ฐ์ฐ์ ๋ถ๋ฆฌํ์ฌ ๋ณ๋์ ํด๋์ค๋ก ๊ตฌ์ฑ |