๋ฐ์ํ
์ฑ๊ธํค ํจํด (Singleton Pattern)
- ํ๋์ ํด๋์ค์ ์ค์ง ํ๋์ ์ธ์คํด์ค ๋ง ๊ฐ์ง๋ ํจํด
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ชจ๋์ ๋ง์ด ์ฌ์ฉ
- ํ๋์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ๋๊ณ ํด๋น ์ธ์คํด์ค๋ฅผ ๋ค๋ฅธ ๋ชจ๋๋ค์ด ๊ณต์ ํ๋ฉฐ ์ฌ์ฉ
- ์ธ์คํด์ค ์์ฑ ๋น์ฉ์ด ์ค์ด๋ฆ
- ๋์์ฑ(Concurrency) ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํด์ผ ํจ
์ฑ๊ธํค ํจํด์ ์ฌ์ฉํ๋ ์ด์
- ์ต์ด ํ ๋ฒ๋ง ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ๊ณ ์ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฐฉ์ง
- ์ด๋ฏธ ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ํ์ฉํด ์๋๊ฐ ๋น ๋ฆ
- ์ฑ๊ธํต ์ธ์คํด์ค๊ฐ ์ ์ญ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ํด๋์ค ๊ฐ์ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ์ฌ์
- ์ธ์คํด์ค๊ฐ ์ ๋์ ์ผ๋ก ํ ๊ฐ๋ง ์กด์ฌํ๋ ๊ฒ์ ๋ณด์ฆํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์ฌ์ฉ
์ฑ๊ธํค ํจํด์ ๋จ์
- ์ฑ๊ธํค ์ธ์คํด์ค๊ฐ ํผ์ ๋๋ฌด ๋ง์ ์ผ์ ํ๊ฑฐ๋, ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ์ํฌ ๊ฒฝ์ฐ์ ๋ค๋ฅธ ํด๋์ค๋ค ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋์์ ธ ๊ฐ๋ฐฉ-ํ์ ์์น์ด ์๋ฐฐ
- ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น (SOLID)
- ๋จ์ผ ์ฑ ์ ์์น (Single Responsiblity Principle): ๋ชจ๋ ํด๋์ค๋ ๊ฐ๊ฐ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ฉฐ, ํด๋์ค๋ ๊ทธ ์ฑ ์์ ์์ ํ ์บก์ํํด์ผ ํจ
- ๊ฐ๋ฐฉ-ํ์ ์์น (Open Closed Principle): ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์(Closed), ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋๋ก(Open) ์ค๊ณ๊ฐ ๋์ด์ผ ํ๋ค๋ ์์น
- ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov Substitution Principle): ์์ ํด๋์ค๋ ์ธ์ ๋ ์์ ์ ๋ถ๋ชจ ํด๋์ค๋ฅผ ๋์ฒดํ ์ ์๋ค๋ ์์น
- ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface Segregation Principle): ํ ํด๋์ค๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค๋ ๊ตฌํํ์ง ๋ง์์ผ ํจ, ํ๋์ ์ผ๋ฐ์ ์ธ ์ธํฐํ์ด์ค๋ณด๋ค ์ฌ๋ฌ ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค๊ฐ ๋์
- ์์กด ์ญ์ ์์น (Dependency Inversion Principle): ์์กด ๊ด๊ณ๋ฅผ ๋งบ์ ๋ ๋ณํํ๊ธฐ ์ฌ์ด ๊ฒ ๋๋ ์์ฃผ ๋ณํํ๋ ๊ฒ๋ณด๋ค๋ ๋ณํํ๊ธฐ ์ด๋ ค์ด ๊ฒ, ๊ฑฐ์ ๋ณํ๊ฐ ์๋ ๊ฒ์ ์์กดํ๋ผ๋ ๊ฒ
- ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น์ ์ด๊ธ๋๊ธฐ ๋๋ฌธ์ ์์ ์ด ์ด๋ ค์์ง๊ณ ์ ์ง๋ณด์ ๋น์ฉ ์ฆ๊ฐ
- ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ผ๋ฉด ์ธ์คํด์ค๊ฐ 2๊ฐ๊ฐ ์์ฑ๋๋ ๋ฌธ์ ๋ ๋ฐ์ ๊ฐ๋ฅ
- ์์์ ์๋ก ๊ณต์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ๋ฆฝ์ ์ด์ง ์์ TDD(Test Driven Development)๋ฅผ ํ ๋ ์ด๋ ค์
- ์์ํด๋์ค๋ฅผ ๋ง๋ค ์ ์๋ค๋ ์ ๊ณผ, ๋ด๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ด๋ ต๋ค๋ ์ ๋ฑ
- ๋ฐ๋ผ์, ๋ฐ๋์ ์ฑ๊ธํค์ด ํ์ํ ์ํฉ์ด ์๋๋ฉด ์ง์ํ๋ ๊ฒ์ด ์ข์
์์กด์ฑ ์ฃผ์ (DI, Dependency Injection)
- ๋ชจ๋ ๊ฐ์ ๊ฒฐํฉ์ ๋์จํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์์กด์ฑ(์ข ์์ฑ): A๊ฐ B์ ์์กด์ฑ์ด ์๋ค๋ ๊ฒ์ B์ ๋ณ๊ฒฝ์ฌํญ์ ๋ํด A ๋ํ ๋ณํด์ผ ๋๋ค๋ ๊ฒ์ ์๋ฏธ
- ๋ฉ์ธ ๋ชจ๋(main module)์ด ์ง์ ๋ค๋ฅธ ํ์ ๋ชจ๋์ ๋ํ ์์กด์ฑ์ ์ฃผ๊ธฐ๋ณด๋ค๋ ์ค๊ฐ์ ์์กด์ฑ ์ฃผ์ ์(dependency injector)๊ฐ ๋์ ์์กด์ฑ ์ฃผ์
- ๋ฉ์ธ๋ชจ๋์ด ๊ฐ์ ์ ์ผ๋ก ์์กด์ฑ ์ฃผ์
- ๋ฉ์ธ๋ชจ๋(์์ ๋ชจ๋)์ ํ์ ๋ชจ๋์ ๋ํ ์์กด์ฑ ๊ฐ์
์์กด์ฑ ์ฃผ์ ์ ์ฅ์
- ๋ชจ๋์ ์ฝ๊ฒ ๊ต์ฒดํ ์ ์๋ ๊ตฌ์กฐ๊ฐ ๋์ด ํ ์คํ ํ๊ธฐ ์ฝ๊ณ ๋ง์ด๊ทธ๋ ์ด์ (migration) ํ๊ธฐ ์์
- ๊ตฌํํ ๋ ์ถ์ํ ๋ ์ด์ด๋ฅผ ๋ฃ๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ์ฒด๋ฅผ ๋ฃ์ด์ฃผ๊ธฐ ๋๋ฌธ์, ์ ํ๋ฆฌ์ผ์ด์ ์์กด์ฑ ๋ฐฉํฅ์ด ์ผ๊ด๋๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ์ถ๋ก ํ ์ ์์ผ๋ฉฐ, ๋ชจ๋ ๊ฐ์ ๊ด๊ณ๋ค์ด ๋ช ํํด์ง
์์กด์ฑ ์ฃผ์ ์ ๋จ์
- ๋ชจ๋๋ค์ด ๋์ฑ ๋ถ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ํด๋์ค ์๊ฐ ์ฆ๊ฐํด ๋ณต์ก์ฑ ์ฆ๊ฐ
- ๋ฐํ์ ํ๋ํฐ ๋ฐ์
์์กด์ฑ ์ฃผ์ ์ ์์น
- ์์ ๋ชจ๋์ ํ์๋ชจ๋์์ ์ด๋ค ๊ฒ๋ ๊ฐ์ ธ์ค์ง ์์์ผ ํจ
- ๋ ๋ค ์ถ์ํ์ ์์กดํด์ผ ํ๋ฉฐ, ์ถ์ํ๋ ์ธ๋ถ ์ฌํญ์ ์์กดํ์ง ๋ง์์ผ ํจ
๋ฐ์ํ
'๐ Computer Science > Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋์์ธ ํจํด] ํฉํ ๋ฆฌ ํจํด (Factory Pattern) (0) | 2023.03.17 |
---|