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) | ๊ฐ์ฒด์ ์์์ ๋ํด ์ํํ ์ฐ์ฐ์ ๋ถ๋ฆฌํ์ฌ ๋ณ๋์ ํด๋์ค๋ก ๊ตฌ์ฑ |