๋ฐ์ํ
์คํฐ๋๋ฅผ ์ด์ํ๊ณ ์์ต๋๋ค.
์๋ ๊นํ๋ธ PR ๋ด์ญ์ ๋ณด์๋ฉด, ๋ค์ํ ์๊ฒฌ์ ์ฃผ๊ณ ๋ฐ์ history๋ฅผ ๋ณด์ค ์ ์์ต๋๋ค.
https://github.com/JulSaMo/CS-start/pulls
๐ ๋์์ธ ํจํด (Design Pattern) ์ด๋
- ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ ๋ ๋ฐ์ํ๋ ๋ค์ํ ๋ฌธ์ ์ ๋ํ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํฌํ๋ฆฟ ํด๊ฒฐ ๋ฐฉ๋ฒ
- ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ ํน์ ์ํฉ์ ์ ์ฉ๋๋ ํจํด์ ์ ํํํด ๋๋ฉด ๋น์ทํ ์ํฉ์์๋ ๋์ฑ ๋น ๋ฅด๊ฒ ๋์ฒํ ์ ์์
- ํ๋ก์ ํธ์ ํญ์ ์ ์ฉํด์ผํ๋ ๊ฒ์ ์๋์ง๋ง, ์ถํ ์ฌ์ฌ์ฉ, ํธํ, ์ ์ง๋ณด์ ์ ๋ฐ์ํ๋ ๋ฌธ์ ํด๊ฒฐ์ ์๋ฐฉํ๊ธฐ ์ํด์ ํจํด์ ๋ง๋ค์ด ๋ ๊ฒ
๋์์ธ ํจํด์ ํน์ง
๐ธ1. ๋์์ดํจํด์ ํ๋์ ์์ด๋์ด์ด๋ค. ํน์ ํ ๊ตฌํ์ด ์๋๋ค.
2. ๊ฒฝํ์ ํตํด ์ป์ ์ ์๋ค.
3. ํน์ ํ ํ์์ ๊ฐ๊ณ ์ฒด๊ณ์ ์ผ๋ก ์์ฑ๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
4. ํจํด์๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ถ์ํ ์์ค์ด ์กด์ฌํ์ฌ ๊ณ์ ์งํํ๋ค.
๋์์ธ ํจํด์ ์ฅ์
๐ธ- ํ๋ก๊ทธ๋๋ฐ ๊ณผ์ ์์ ์์ฌ์ํต์ ๋์์ค๋ค.
- ๋์์ธ ํจํด์ ์๊ณ ์๋ ์ค๊ณ์๋ค์ ๋ฌธ์ ์ ๋ํด ๊ณตํต์ ์ผ๋ก ์๊ณ ์๋ ํจํด์ ์ด์ฉํด ๋ ผ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋์ฑ ์ํํ๊ฒ ์์ฌ์ํต์ด ๊ฐ๋ฅ
- ๊ฐ๋ฐ ๋น์ฉ์ ์ค์ผ ์ ์๋ค.
- ๊ฒ์ฆ๋ ์ง์์ ๋ฐํ์ผ๋ก ํจํด์ ์ฌ์ฉํ๋ฏ๋ก, ๋์ ์์ฑ๋์ ๋์์ธ์ ๋น ๋ฅธ ์๊ฐ์์ ๋ง๋ค์ด ๋ผ ์ ์๊ธฐ ๋๋ฌธ์.
- ๋ํ ์ฝ๋์ ์์ค์ ๋์ฌ์ฃผ๋ฉฐ ์ ์ ์์ ํด๋์ค๋ก ์ํ๋ ๋ชฉ์ ์ ๋ฌ์ฑํ ์ ์๋ ํ๊ฒฝ์ด ์ ๊ณต๋๋ค.
- ๊ฐ๋ฐ์๋ ๊ทธ ํจํด ์ด๋ฆ๋ง์ผ๋ก ๊ทธ ์ํํธ์จ์ด์ ๊ตฌ์กฐ๋ฅผ ์ ์ ์๋ค.
- ์ด์ ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์ฌ์ฉํ ์ค๊ณ๋ ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์๊ณ , ์๋ก์ด ์ํํธ์จ์ด๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ฉํ ์ ์์ด์ ์ํํธ์จ์ด ์ฌ์ฌ์ฉ์ด ์ฝ๋ค.
๊ฐ์ฒด ์งํฅ ๋์์ธ์ 5๋ ์์น SOLID
๐์ข์ ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ์ํด์ 5๊ฐ์ง ์์น, SOLID๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ข๋ค. ์ด ์์น๋ค์ ๊ธฐ๋ฐ์ผ๋ก ๋์์ธ ํจํด์ด ๋๊ธฐ ๋๋ฌธ์ ์์๋๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ค.
- SRP (Single Responsibility Principle, ๋จ์ผ ์ฑ
์ ์์น)
- ํ๋์ ํด๋์ค๋ ํ๋์ ์ญํ ๋ง ํด์ผํ๋ค.
- OCP (Open-Close Principle, ๊ฐ๋ฐฉ ํ์ ์์น)
- ํ์ฅ(์์)์๋ ์ด๋ ค์๊ณ , ์์ ์๋ ๋ซํ์์ด์ผ ํ๋ค.
- LSP (Liskov Substitution Prinsicple, ๋ฆฌ์ค์ฝํ ์นํ ์์น)
- ์์์ด ๋ถ๋ชจ์ ์๋ฆฌ์ ํญ์ ๊ต์ฒด๋ ์ ์์ด์ผํ๋ค.
- ISP (Interface Segregation Principle, ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น)
- ์ธํฐํ์ด์ค๊ฐ ์ ๋ถ๋ฆฌ๋์ด์, ํด๋์ค๊ฐ ๊ผญ ํ์ํ ์ธํฐํ์ด์ค๋ง ๊ตฌํํ๋๋ก ํด์ผํจ.
- DIP (Dependency Inversion Property, ์์กด์ฑ ์ญ์ ์์น)
- ์์ ๋ชจ๋์ด ํ์ ๋ชจ๋์ ์์กดํ๋ฉด ์๋๋ค.
- ๋ ๋ค ์ถ์ํ์ ์์กดํ๋ฉฐ, ์ถ์ํ๋ ์ธ๋ถ ์ฌํญ์ ์์กดํ๋ฉด ์๋๋ค.
๐ค ํจํด์ SOLID ์์น์ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ข๋ค๊ณ ํ๋๋ฐ,
์ด๋ป๊ฒ ๋ฐ๋ผ์ผ ํ๋๊ฑด์ง ์์ธํ ์ค๋ช
์ ์ด์์ ์์ฑํ ์์ ์ด๋ค.
์ฝ๋๋ฅผ ํจํดํ ์ํค๋ฉด์, ๋์์ SOLID ์์น์ ๋ฌด๋์ง์ง ์๋ ์ฝ๋๋ฅผ ์ง๋๊ฒ ์ค์ํ ๊ฒ ๊ฐ๋ค.
๋์์ธ ํจํด์ ๋ถ๋ฅ
๐- ๊ฐ๋ฐ์๋ ์ด๋ค ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ด๋ ์์ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์๋ฉธ์ํฌ์ง, ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๋ฐ์์ ์ฒ๋ฆฌํ ์ง, ๊ตฌ์กฐ์ค๊ณ๋ฅผ ์ด๋ฏ๊ฒ ํด์ผํ ์ง ๊ณ ๋ฏผํ๋ค.
- ๋์์ธํจํด ๋ถ๋ฅ๋, ์์ ๊ฐ์ด ์ํํธ์จ์ด ์ฝ๋๋ฅผ ์์ฑํ ๋ ์์ฃผ ๋ฐ๋ณต๋๋ ํน์ ์ํฉ์์ ์ค๊ณ๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ฉฐ ์ฝ๋์ ์ฌ์ฌ์ฉ์ด ์ฉ์ดํ๋๋ก ํจํด์ ์ ๋ฆฌํด ๋์ ๊ฒ
- ๊ฐ์ฅ ์ ์๋ ค์ง ๋ถ๋ฅ๋ฒ์ผ๋ก GoF ํจํด ๋ถ๋ฅ ๋ฐฉ๋ฒ์ด ์๋ค.
- GoF ๋ถ๋ฅ ๋ฐฉ๋ฒ์, ๋์์ธ ํจํด์ ๋ชฉ์ ๊ณผ ๋ฒ์๋ก ๋ถ๋ฅํ๋ค.
๋ชฉ์ ์ ๋ฐ๋ฅธ ๋ถ๋ฅ
๐ธํจํด์ด ๋ฌด์์ธ์ง ์ ์ํ๋ ๊ฒ์ผ๋ก "์์ฑ", "๊ตฌ์กฐ", "ํ์" ์ค ํ ๊ฐ์ง์ ๋ชฉ์ ์ ๊ฐ๋๋ค.
์์ฑ (Creational Pattern)
1๏ธโฃ- ๊ฐ์ฒด์ ์์ฑ ๊ณผ์ ์ ๊ด์ฌํ๋ ํจํด์ด๋ค.
- ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ฐธ์กฐ ๊ณผ์ ์ ์บก์ํ ํ์ฌ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋์ด๋ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ์ ์ํฅ์ ํฌ;๊ฒ ๋ฐ์ง ์๋๋ก ํ์ฌ ํ๋ก๊ทธ๋จ์ ์ ์ฐ์ฑ์ ๋ํด์ค๋ค.
- (์์) DBConnection์ ๊ด๋ฆฌํ๋ Instance๋ฅผ ํ๋๋ง ๋ง๋ค ์ ์๋๋ก ์ ํํ์ฌ, ๋ถํ์ํ ์ฐ๊ฒฐ์ ๋ง์. (๊ฐ์ฒด ์์ฑ์ ๊ด์ฌ!)
๊ตฌ์กฐ (Structural Patternn)
2๏ธโฃ- ํด๋์ค๋ ๊ฐ์ฒด์ ๊ตฌ์ฑ์ ํตํด ๋ ํฐ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ํจํด
- ๊ตฌ์กฐํจํด์ ๊ตฌ์กฐ๊ฐ ๋ณต์กํ ์์คํ
์ ๊ฐ๋ฐํ๊ธฐ ์ฝ๊ฒ ๋์์ค๋ค.
- ์ด 7๊ฐ์ ํจํด์ด ์๋ค.
- (์์) 2๊ฐ์ ์ธํฐํ์ด์ค๊ฐ ์๋ก ํธํ์ด ๋์ง ์์ ๋, ๋์ ์ฐ๊ฒฐํด์ฃผ๊ธฐ ์ํด์ ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ์ฐ๊ฒฐ์ํฌ ์ ์๋๋ก ํ๋ ํจํด.
ํ์ ํจํด (Behavioral Pattern)
3๏ธโฃ- ํด๋์ค๋ ๊ฐ์ฒด๋ค์ด ์๋ก ์ํธ์์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ ์ฑ
์ ๋ถ๋ฐฐ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ํจํด
- ํ๋์ ๊ฐ์ฒด๋ก ์ํํ ์ ์๋ ์์
๋ค์ ์ฌ๋ฌ ๊ฐ์ฒด๋ก ๋ถ๋ฐฐํ๋ฉด์ ๊ฒฐํฉ๋๋ฅผ ์ต์ํ ํ ์ ์๋๋ก ๋์์ค๋ค.
- ์ด 11๊ฐ์ ํจํด์ด ์๋ค.
- (์์) ํ์ ํด๋์ค์์ ๊ตฌํํด์ผํ๋ ํจ์ ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ฏธ๋ฆฌ ์ ์ธํ์ฌ, ์์์ ์ด๋ฅผ ํ์๋ก ๊ตฌํํ๋๋ก ํ๋ ํจํด
์์ฑ, ๊ตฌ์กฐ, ํ์ ํจํด์ ์ข ๋ฅ
๐ธ์์ฑ ํจํด๊ตฌ์กฐ ํจํดํ์ ํจํด
์ถ์ ํฉํ ๋ฆฌ (Abstract Factory) | ์ด๋ํฐ (Adapter) | ์ฑ ์ ์ฐ์ (Chain of Responsibility) |
๋น๋ (Builder) | ๋ธ๋ฆฌ์ง (Bridge) | ์ปค๋งจ๋ (Command) |
ํฉํ ๋ฆฌ ๋ฉ์๋ (Factory Method) | ์ปดํฌ์งํธ (Composite) | ์ธํฐํ๋ฆฌํฐ (Interpretor) |
ํ๋กํ ํ์ Prototype) | ๋ฐ์ฝ๋ ์ดํฐ (Decorator) | ๋ฏธ๋์์ดํฐ (์ค์ฌ์) (Mediator) |
์ฑ๊ทธํค (Singleton) | ํผ์ธ๋ (Facade) | ๋ฉ๋ฉํ (Memento) |
ํ๋ผ์ด์จ์ดํธ (Flyweight) | ์ต์ ๋ฒ (Observer) | |
ํ๋ก์ (Proxy) | ์ํ (State) | |
โจMVCโจ | ์ ๋ต (Stretegy) | |
โจMVPโจ | ํ ํ๋ฆฟ ๋ฉ์๋ (Template Method) | |
โจMVVMโจ | ๋น์งํฐ (๋ฐฉ๋ฌธ์) (Visitor) | |
๋ฐ๋ณต์ (Iterator) |
๊ฐ๊ฐ์ ํจํด ๊ฐ๋จํ๊ฒ ์์๋ณด๊ธฐ
๐ค์ ๋ง ์ ๋ง ๊ฐ๋จํ๊ฒ ๊ฐ๋ ๋ง ์ง๊ณ ๋์ด๊ฐ๋ ๋จ๊ณ์ ๋๋ค. (์ํ ๋ ค๋ค๊ฐ ํจ!) ๊ฐ๊ฐ ํจํด์ ๋ํ ์์ธํ ์ฌํญ์ ์ถํ ์ ๋ก๋ ๋๋ ํจํด ๊ด๋ จ ํ์ผ์ ๋ฐ๋ก ๋ณด์๋ฉด ์์ธํ ์ดํด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์์ฑํจํด
๐ฌ์ถ์ ํฉํ ๋ฆฌ (Abstract Factor)
- ๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ์์กดํ์ง ์๊ณ , ์ธํฐํ์ด์ค๋ฅผ ํตํด ์๋ก ์ฐ๊ด,
์์กดํ๋ ๊ฐ์ฒด๋ค์ ๊ทธ๋ฃน์ผ๋ก ์์ฑํ์ฌ ์ถ์์ ์ผ๋ก ํํํ๋ค.
- ์ฐ๊ด ์๋ธ ํด๋์ค๋ฅผ ๋ฌถ์ด ํ ๋ฒ์ ๊ต์ฒดํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
๋น๋ (Builder)
- ์๊ฒ ๋ถ๋ฆฌ๋ ์ธ์คํด์ค๋ฅผ ๊ฑด์ถํ๋ฏ์ด ์กฐํฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- ๊ฐ์ฒด์ ์์ฑ ๊ณผ์ ๊ณผ ํํ ๋ฐฉ๋ฒ์ ๋ถ๋ฆฌํ๊ณ ์์ด, ๋์ผํ ๊ฐ์ฒด ์์ฑ์์๋ ์๋ก ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๋ค.
ํ ํ ๋ฆฌ ๋ฉ์๋ (Factory Method)
- ๊ฐ์ฒด ์์ฑ์ ์๋ธ ํด๋์ค์์ ์ฒ๋ฆฌํ๋๋ก ๋ถ๋ฆฌํ์ฌ ์บก์ํํ ํจํด์ด๋ค.
- ์์ ํด๋์ค์์ ์ธํฐํ์ด์ค๋ง ์ ์ํ๊ณ ์ค์ ์ใ
๊ฒ
์ ์๋ธํด๋์ค๊ฐ ๋ด๋นํ๋ค.
- ๊ฐ์ ์์ฑ์ (Virtual Constructor) ํจํด์ด๋ผ๊ณ ๋ ํ๋ค.
ํ๋กํ ํ์ (Prototype)
- ์๋ณธ ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจํด์ด๋ค.
- ์ผ๋ฐ๋์ธ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉฐ, ๋น์ฉ์ด ํฐ ๊ฒฝ์ฐ ์ฃผ๋ก ์ด์ฉํ๋ค.
์ฑ๊ธํค (Singleton)
- ํ๋์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ด๋์๋ ์ฐธ์กฐํ ์ ์์ง๋ง, ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ฐธ์กฐํ ์๋ ์๋ค.
- ํด๋์ค ๋ด์์ ์ธ์คํด์ค๊ฐ ํ๋ ๋ฟ์์ ๋ณด์ฅํ๋ฉฐ, ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ต์ํํ ์ ์๋ค.
๊ตฌ์กฐํจํด
๐ฌMVC, MVVM, MVP ๋ iOS์์ ๊ฐ์ฅ ๋ํ์ ์ผ๋ก ์ฌ์ฉํ๋ '๊ตฌ์กฐํจํด'์ด๋ค.
โจMVCโจ
- Model: ์ฑ์ ๋น์ฆ๋์ค ๋ก์ง์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๋นํ๋ ์ฝ๋
- View: ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ์ง๋จ
- Controller: Model๊ณผ View ์ฌ์ด์ ์ค๊ฐ์ ์ญํ
โ
iOS๋ ์ฃผ๋ก ViewController๋ก View + Controller๋ก ์ฌ์ฉ
<๐ค๋จ์ >
- View์ Controller๊ฐ์ ์์กด์ฑ์ด ๋์์ง์ ๋ฐ๋ผ ์ฌ์ฌ์ฉ์ฑ์ด ๋ฎ์์ง๊ฒ ๋๋ค. -> ๊ทธ๋์ MVP ๋ฑ์ฅ
โจMVPโจ
Controller๋ฅผ ๋์ ํด present๋ผ๋ ๊ฐ๋
์ผ๋ก ๋ฐ๋์๋ค.
ํ์ง๋ง ์ด ์ญ์ view - present์ ๊ด๊ณ๊ฐ 1:1 ์ด๋ผ๋ ์์กด์ฑ ๋ฌธ์ ๊ฐ ์๊ฒจ ๋ฎ์ ์ฌ์ฌ์ฉ์ฑ์ ๊ฐ๋๋ค๋ ๋จ์ ์ด ์๋ค.
โจMVVMโจ
- ์ด๋ฒคํธ์ ํ๋ฆ์ด ๋จ๋ฐฉํฅ์ด๋ค.
- ์ฌ์ฉ์์ ์ด๋ฒคํธ๋ฅผ view๊ฐ viewmodel๋ก ์ ๋ฌํ๊ณ , model์๊ฒ ์์ ์ฌํญ์ ํ ์คํ๋ ์์ผ๋ก ์งํ
- command pattern(ํ์ํจํด!!)๊ณผ data binding์ ์ด์ฉํ์ฌ view์ viewmodel ์ฌ์ด์ ์์กด์ฑ์ ์ ๊ฑฐํ๋ค.
* data binding: viewmodel ์์ ์ผ์ด๋๋ ์ผ์ view๊ฐ observingํ๊ณ ์์.
๊ทธ๋ฆฌ๊ณ ๊ด์ฐฐํ๊ณ ์๋ viewmodel์ด ๋ณ๊ฒฝ๋๋ฉด ์์ ์ด ๋ณด์ฌ์ฃผ๊ณ ์๋ view์ ๋ณ๊ฒฝ ์ฌํญ์ ์๋ฆฌ๋ฉฐ ๋ฐ๊ฟ์ ๋ณด์ฌ์ค
์ด๋ํฐ (Adpator)
- ํธํ์ฑ์ด ์๋ ํด๋์ค๋ค์ ์ธํฐํ์ด์ค๋ฅผ, ๋ค๋ฅธ ํด๋์ค๊ฐ ์ด์ฉํ ์ ์๋๋ก ๋ณํํด์ฃผ๋ ํจํด
- ๊ธฐ์กด์ ํด๋์ค๋ฅผ ์ด์ฉํ๊ณ ์ถ์ง๋ง ์ธํฐํ์ด์ค๊ฐ ์ผ์นํ์ง ์์ ๋ ์ด์ฉํ๋ค.
๋ธ๋ฆฌ์ง (Bridge)
- ๊ตฌํ๋ถ์์ ์ถ์์ธต์ ๋ถ๋ฆฌํ์ฌ, ์๋ก๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ํ์ฅํ ์ ์๋๋ก ๊ตฌ์ฑํ ํจํด์ด๋ค.
- ๊ธฐ๋ฅ๊ณผ ๊ตฌํ์ ๋ ๊ฐ์ ๋ณ๋ ํด๋์ค๋ก ๊ตฌํํ๋ค.
์ปดํฌ์งํธ (Composite)
- ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง ๋ณตํฉ ๊ฐ์ฒด์ ๋จ์ผ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ์์ด ๋ค๋ฃจ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ ํจํด์ด๋ค.
- ๊ฐ์ฒด๋ค์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ์ฌ ๋๋ ํฐ๋ฆฌ ์์ ๋๋ํฐ๋ฆฌ๊ฐ ์๋ฏ์ด,
๋ณตํฉ ๊ฐ์ฒด ์์ ๋ณตํฉ ๊ฐ์ฒด๊ฐ ํฌํจ๋๋ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ ์ ์๋ค.
๋ฐ์ฝ๋ ์ดํฐ (Decorator)
- ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ์ ํตํด ๋ฅ๋์ ์ผ๋ก ๊ธฐ๋ฅ๋ค์ ํ์ฅํ ์ ์๋ ํจํด
- ์์์ ๊ฐ์ฒด์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ๋ง๋ถ์ด๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ
ํผ์ธ๋ (Facade)
- ๋ณต์กํ ์๋ธ ํด๋์ค๋ค์ ํผํด ๋ ์์์ ์ธํฐํ์ด์ค๋ค์ ๊ตฌ์ฑํจ์ผ๋ก์จ ์๋ธ ํด๋์ค๋ค์ ๊ธฐ๋ฅ์ ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ํจํด
- ์๋ธ ํด๋์ค๋ค ์ฌ์ด์ ํตํฉ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ Wrapper ๊ฐ์ฒด๊ฐ ํ์ํ๋ค
ํ๋ผ์ด์จ์ดํธ (Flyweight)
- ์ธ์คํด์ค๊ฐ ํ์ํ ๋๋ง๋ค ๋งค๋ฒ ์์ฑํ๋ ๊ฒ์ด ์๋๊ณ , ๊ฐ๋ฅํ ํ ๊ณต์ ํด์ ์ฌ์ฉํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ๋ ํผํด
- ๋ค์์ ์ ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์กฐ์ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์
ํ๋ก์ (Proxy)
- ์ ๊ทผ์ด ์ด๋ ค์ด ๊ฐ์ฒด์ ์ฌ๊ธฐ์ ์ฐ๊ฒฐํ๋ ค๋ ๊ฐ์ฒด ์ฌ์ด์์ ์ธํฐํ์ด์ค ์ญํ ์ ์ํํ๋ ํจํด
- ๋คํธ์ํฌ ์ฐ๊ฒฐ, ๋ฉ๋ชจ๋ฆฌ์ ๋์ฉ๋ ๊ฐ์ฒด๋ก์ ์ ๊ทผ ๋ฑ์ ์ฃผ๋ก
ํ์ ํจํด
๐ฌ์ฑ ์ ์ฐ์ (Chain of Responsibility)
- ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฐ์ฒด๊ฐ ๋ ์ด์ ์กด์ฌํ์ฌ ํ ๊ฐ์ฒด๊ฐ ์ฒ๋ฆฌ๋์ง ๋ชปํ๋ฉด ๋ค์ ๊ฐ์ฒด๋ก ๋์ด๊ฐ๋ ํํ์ ํจํด
- ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฐ ๊ฐ์ฒด๋ค์ด chain์ผ๋ก ๋ฌถ์ฌ ์์ด ์์ฒญ์ด ํด๊ฒฐ๋ ๋๊น์ง chain์ ๋ฐ๋ผ ์ฑ
์์ด ๋์ด๊ฐ๋ค.
์ปค๋งจ๋ (Command)
- ์์ฒญ์ ๊ฐ์ฒด์ ํํ๋ก ์บก์ํํ์ฌ ์ฌ์ด์ฉํ๊ฑฐ๋ ์ต์ํ ์ ์๋๋ก ์์ฒญ์ ํ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ก๊ทธ์ ๋จ๊ธฐ๋ ํจํด
- ์์ฒญ์ ์ฌ์ฉ๋๋ ๊ฐ์ข
๋ช
๋ น์ด๋ค์ ์ถ์ ํด๋์ค์ ๊ตฌ์ฒด ํด๋์ค๋ก ๋ถ๋ฆฌํ์ฌ ๋จ์ํํ๋ค.
์ธํฐํ๋ฆฌํฐ (Interpreter)
- ์ธ์ด์ ๋ฌธ๋ฒ ํํ์ ์ ์ํ๋ ํจํด
- SQL์ด๋ ํต์ ํ๋กํ ์ฝ๊ณผ ๊ฐ์ ๊ฒ์ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ๋ค.
๋ฐ๋ณต์ (Iterator)
- ์๋ฃ๊ตฌ์กฐ์ ๊ฐ์ด ์ ๊ทผ์ด ์ฆ์ ๊ฐ์ฒด์ ๋ํด ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ ํจํด
- ๋ด๋ถ ํํ ๋ฐฉ๋ฒ์ ๋
ธ์ถ ์์ด ์์ฐจ์ ์ธ ์ ๊ทผ์ด ๊ฐ๋ฅ
์ค์ฌ์ (Mediator)
- ์๋ง์ ๊ฐ์ฒด๋ค ๊ฐ์ ๋ณต์กํ ์ํธ์์ฉ์ ์บก์ํํ์ฌ ๊ฐ์ฒด๋ก ์ ์ํ๋ ํจํด
- ๊ฐ์ฒด ์ฌ์ด์ ์์กด์ฑ์ ์ค์ฌ ๊ฒฐํฉ๋๋ฅผ ๊ฐ์์ํฌ ์ ์์
- ์ค์ฌ์๋ ๊ฐ์ฒด ๊ฐ์ ํต์ ์ ์ง์์ ์ญํ ์ ์ํ
๋ฉ๋ฉํ (Memento)
- ํน์ ์์ ์์์ ๊ฐ์ฒด ๋ด๋ถ ์ํ๋ฅผ ๊ฐ์ฒดํํจ์ผ๋ก์จ ์ดํ ์์ฒญ์ ๋ฐ๋ผ ๊ฐ์ฒด๋ฅผ ํด๋น ์์ ์ ์ํ๋ก ๋๋ฆด ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํจํด
- Cmd+Z ๊ฐ์ ๋๋๋ฆฌ๊ธฐ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ๋ ์ฃผ๋ก ์ด์ฉํจ
์ต์ ๋ฒ (Observer)
- ํ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณํํ๋ฉด ๊ฐ์ฒด์ ์์๋์ด ์๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์๊ฒ ๋ณํ๋ ์ํ๋ฅผ ์ ๋ฌํ๋ ํจํด
- ์ฃผ๋ก ๋ถ์ฐ๋ ์์คํ
๊ฐ์ ์ด๋ฒคํธ๋ฅผ ์์ฑ, ๋ฐํํ๊ณ ์ด๋ฅผ ์์ ํด์ผํ ๋ ์ด์ฉ
์ํ (State)
- ๊ฐ์ฒด์ ์ํ์ ๋ฐ๋ผ ๋์ผํ ๋ใ
์์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํด์ผํ ๋ ์ฌ์ฉํ๋ ํจํด
- ๊ฐ์ฒด ์ํ๋ฅผ ์บก์ํํ๊ณ ์ด๋ฅผ ์ฐธ์กฐํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ
์ ๋ต (Stretgy)
- ๋์ผํ ๊ณ์ด์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ณ์ ์ผ๋ก ์บก์ํํ์ฌ ์ํธ ๊ตํํ ์ ์๊ฒ ์ ์ํ๋ ํจํด
- ํด๋ผ์ด์ธํธ๋ ๋
๋ฆฝ์ ์ผ๋ก ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ์ฌ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์ํฅ์์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค
ํฌํ๋ฆฟ ๋ฉ์๋ (Template Method)
- ์์ ํด๋์ค์์ ๊ณจ๊ฒฉ์ ์ ์ํ๊ณ , ํ์ ํด๋์ค์์ ์ธ๋ถ ์ฒ๋ฆฌ๋ฅผ ๊ตฌ์ฒดํํ๋ ๊ตฌ์กฐ์ ํจํด
- ์ ์ฌํ ์๋ธ ํด๋์ค๋ฅผ ๋ฌถ์ด ๊ณตํต๋ ๋ด์ฉ์ ์์ ํด๋์ค์์ ์ ์ํจ์ผ๋ก์จ ์ฝ๋์ ์์ ์ค์ด๊ณ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ค.
๋ฐฉ๋ฌธ์ (Visitor)
- ๊ฐ ํด๋์ค๋ค์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ๋ณ๋์ ํด๋์ค๋ก ๊ตฌ์ฑํ๋ ํจํด
- ๋ถ๋ฆฌ๋ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๊ฐ ํด๋์ค๋ฅผ ๋ฐฉ๋ฌธ(visit) ํ์ฌ
๐ Reference
https://woovictory.github.io/2019/05/10/What-is-SOLID/
๋ฐ์ํ
'Computer > Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋์์ธ ํจํด] (iOS) MVC ํจํด์ MVVMํจํด์ผ๋ก ๋ฐ๊ฟ๋ณด๊ธฐ (feat. Combine) (0) | 2023.02.07 |
---|---|
[๋์์ธํจํด] (Swift) Singleton Pattern (์ฑ๊ธํค ํจํด ๊ตฌํํด๋ณด๊ธฐ) (0) | 2023.02.06 |