๋ฐ์ํ
Solid Principles (์๋ฆฌ๋ ์์น)
SOLID ์์น์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์ํํธ์จ์ด ์์ง๋์ด๋ง์์ ์ข์ ์ฝ๋ ์ค๊ณ๋ฅผ ์ํ ๋ค์ฏ ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ์์น์ ๋งํฉ๋๋ค.
์ด ์์น๋ค์ ์ฝ๋์ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํค๊ณ , ํ์ฅ์ฑ์ ์ฉ์ดํ๊ฒ ํ๋ฉฐ, ๋ณต์ก์ฑ์ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ ์ค๋๋ค. 5๊ฐ์ ์์น์ด ์์ต๋๋ค.
- S - Single Responsibility Principle (๋จ์ผ ์ฑ
์ ์์น)
- ๊ฐ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ์ฆ, ์์คํ ์์ ๋ณ๊ฒฝ์ด ํ์ํ ํ ๊ฐ์ง ์ด์ ๋ง์ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค. ์ด ์์น์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ , ๋ณ๊ฒฝ์ ๋ํ ์ ์ฐ์ฑ์ ์ฆ๊ฐ์ํต๋๋ค.
- O - Open/Closed Principle (๊ฐ๋ฐฉ/ํ์ ์์น)
- ์ํํธ์จ์ด์ ์ํฐํฐ(ํด๋์ค, ๋ชจ๋, ํจ์ ๋ฑ)๋ ํ์ฅ์ ๋ํด์๋ ์ด๋ ค ์์ด์ผ ํ์ง๋ง, ๋ณ๊ฒฝ์ ๋ํด์๋ ๋ซํ ์์ด์ผ ํฉ๋๋ค. ์ฆ, ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋, ์์คํ ์ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด ์์น์ ์ ์ฐํ๊ณ ํ์ฅ์ฑ ์๋ ์ํํธ์จ์ด ์ค๊ณ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- L - Liskov Substitution Principle (๋ฆฌ์ค์ฝํ ์นํ ์์น)
- ํ๋ก๊ทธ๋จ์์ ๋ถ๋ชจ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ ํด๋์ค์ ์ธ์คํด์ค๋ก ๋์ฒดํ ์ ์์ด์ผ ํฉ๋๋ค(๋จ, ๋ถ๋ชจ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ณณ์ ์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋์ด๋ ํ๋ก๊ทธ๋จ์ ์๋ฏธ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ผ ํฉ๋๋ค). ์ด ์์น์ ์์์ ์ฌ์ฉํ ๋์ ๊ฐ์ด๋๋ผ์ธ์ ์ ๊ณตํฉ๋๋ค.
- I - Interface Segregation Principle (์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น)
- ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กดํ๊ฒ ๋์ด์๋ ์ ๋ฉ๋๋ค. ์ด ์์น์ 'ํฐ' ์ธํฐํ์ด์ค๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์ค์ ๋ก ์ฌ์ฉํ๋ ๋ฉ์๋๋ง ํฌํจํ๋ ์ฌ๋ฌ ๊ฐ์ '์์' ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. ์ด๋ ์ธํฐํ์ด์ค์ ๋ถ๋ฆฌ๋ฅผ ํตํด ์์คํ ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ์ ์ฐ์ฑ์ ํฅ์์ํต๋๋ค.
- D - Dependency Inversion Principle (์์กด์ฑ ์ญ์ ์์น)
- ๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ์์กดํด์๋ ์ ๋๋ฉฐ, ๋ ๋ค ์ถ์ํ์ ์์กดํด์ผ ํฉ๋๋ค. ์ถ์ํ๋ ์ธ๋ถ ์ฌํญ์ ์์กดํด์๋ ์ ๋๋ฉฐ, ์ธ๋ถ ์ฌํญ์ ์ถ์ํ์ ์์กดํด์ผ ํฉ๋๋ค. ์ด ์์น์ ๋ชจ๋ ๊ฐ์ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ์ฌ, ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ ๋๋ค.
Single Responsbility Principle (SRP-๋จ์ผ ์ฑ ์ ์์น)
- ๋จ์ผ ์ฑ ์ ์์น(SRP, Single Responsibility Principle)์ ์ํํธ์จ์ด ์ค๊ณ์ SOLID ์์น ์ค ํ๋๋ก, ๋ชจ๋ ํด๋์ค๋ ๋จ ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ ธ์ผ ํ๋ค๋ ์์น์ ๋๋ค.
- ์ด ์์น์ ํต์ฌ์ '์ฑ ์'์ ์ด๋ป๊ฒ ์ ์ํ๋๋์ ์์ผ๋ฉฐ, ์ฌ๊ธฐ์ ์ฑ ์์ ๋ณ๊ฒฝ์ด ํ์ํ ๋ ๊ทธ ๋ณ๊ฒฝ์ ์ด์ ๋ก ํ๋ ๊ธฐ๋ฅ์ด๋ ์ด์ ๋ฅผ ์๋ฏธํฉ๋๋ค.
- ํด๋์ค๋ฅผ ๊ตฌํํ ๋ ํ๊ฐ์ง ๊ธฐ๋ฅ์๋ง ์ค์ ์ ๋์ด์ผ ํฉ๋๋ค. ๋๊ฐ์ง ์ด์์ ๊ธฐ๋ฅ์ด ํ์ํ๋ฉด ํด๋์ค๋ฅผ ๋๋ ์ผ ํฉ๋๋ค.
- ์ฆ, ํ ํด๋์ค๋ ํ ๊ฐ์ง์ ๋ณ๊ฒฝ ์ด์ ๋ง์ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
- ๋จ์ผ ์ฑ ์ ์์น์ ๋ฐ๋ฅด๋ ํด๋์ค ์ค๊ณ๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ํน์ ๊ธฐ๋ฅ์ ์์ ํ ๋ ๊ด๋ จ ํด๋์ค ์ธ์๋ ๊ฑด๋๋ฆด ํ์๊ฐ ์๊ณ , ํ๊ฐ์ ํด๋์ค์ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ์ด ์๋ค๋ฉด ๊ด๋ จ๋ ๋ชจ๋ ํด๋์ค๋ฅผ ์์ ํด์ผํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์ ์ง๋ณด์์ฑ ํฅ์: ํน์ ๊ธฐ๋ฅ์ ๋ํ ์์ ์ด ํ์ํ ๋, ๊ทธ ๋ณ๊ฒฝ์ด ํ์ํ ํด๋์ค๋ง์ ์์ ํ๋ฉด ๋๋ฏ๋ก, ์์คํ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ํ ์ํฅ์ ์ต์ํํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ง๋ณด์์ ๋ณต์ก์ฑ๊ณผ ๊ด๋ จ๋ ๋น์ฉ์ ์ค์ฌ์ค๋๋ค.
- ์ดํดํ๊ธฐ ์ฌ์ด ์ฝ๋: ํด๋์ค๊ฐ ๋จ ํ๋์ ์ฑ ์์ ๊ฐ์ง๊ณ ์์ผ๋ฉด, ๊ทธ ํด๋์ค์ ์ญํ ๊ณผ ๊ธฐ๋ฅ์ด ๋ช ํํด์ง๋๋ค. ์ด๋ก ์ธํด ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ํฅ์๋๋ฉฐ, ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์์ ํ๋ ๋ฐ ์์๋๋ ์๊ฐ์ด ๋จ์ถ๋ฉ๋๋ค.
- ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ: ๋จ์ผ ์ฑ ์์ ๊ฐ์ง ํด๋์ค๋ ๊ทธ ๊ธฐ๋ฅ์ด ๋ค๋ฅธ ์์คํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ํ์ํ ๋ ์ฌ์ฌ์ฉํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ์ด๋ ์ฝ๋์ ์ค๋ณต์ ์ค์ด๊ณ , ๊ฐ๋ฐ ์๊ฐ์ ๋จ์ถ์ํฌ ์ ์์ต๋๋ค.
- ํ ์คํธ ์ฉ์ด์ฑ: ํ ํด๋์ค๊ฐ ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ง ๊ฒฝ์ฐ, ๊ทธ ๊ธฐ๋ฅ์ ๋ํ ํ ์คํธ๊ฐ ๋ ์ฌ์์ง๋๋ค. ๋ณต์กํ ์์กด์ฑ์ด ์ค์ด๋ค๊ธฐ ๋๋ฌธ์, ํน์ ๊ธฐ๋ฅ์ ๋ํ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ์คํํ๋ ๊ฒ์ด ๊ฐ๋จํด์ง๋๋ค.
- ๋จ์ผ ์ฑ ์ ์์น์ ์ ์ฉํ ๋ ์ฃผ์ํ ์ ์, '์ฑ ์'์ ๋ฒ์์ ์ ์๋ฅผ ๋๋ฌด ์ข๊ฒ ๋ณด์ง ์๋๋ก ํด์ผ ํฉ๋๋ค.
- ๋๋ฌด ๋ง์ ์ธ๋ถํ๋ ์คํ๋ ค ๊ด๋ฆฌํด์ผ ํ ํด๋์ค์ ์๊ฐ ์ฆ๊ฐํ์ฌ ๋ณต์ก์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- ๋ฐ๋ผ์, ์ ์ ํ ์์ค์์ ํด๋์ค์ ์ฑ
์์ ๋ถ๋ฆฌํ๋ ๊ท ํ์ ์ฐพ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
Example
- Add ํจ์๋ ๋ง์ ์ ํ๋๊ฒ์๋ง ์ฑ ์์ ๋คํด์ผ ํฉ๋๋ค.
- numPrint ํจ์๋ ์ซ์๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์๋ง ์ฑ ์์ ๋ค ํด์ผํฉ๋๋ค.
- addPrintํจ์๋ Single Responsbility ์์น์ ๋ฐ๋ฅด์ง ์์ต๋๋ค.
ํด๋์ค๋ก ์์ฑ๋ ์ฝ๋์ ์์
Open-Close Principle (OCP, ๊ฐ๋ฐฉ-ํจ์์์น)
๊ฐ๋ฐฉ-ํ์ ์์น(OCP, Open-Closed Principle)์ ์ํํธ์จ์ด ์ค๊ณ์ ์ค์ํ ์์น ์ค ํ๋๋ก, ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ๋์์ ์์ ์ ์ธ ์ํํธ์จ์ด ์์คํ ์ ๊ตฌ์ถํ๊ณ ์ ํ ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ๊ฐ๋ฐฉ-ํ์ ์์น(OCP, Open-Closed Principle)์ ํต์ฌ ์์ด๋์ด๋ ์ํํธ์จ์ด ์ปดํฌ๋ํธ(ํด๋์ค, ๋ชจ๋, ํจ์ ๋ฑ)๊ฐ ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ์๊ตฌ์ฌํญ์ ์ถ๊ฐ์๋ ์ด๋ ค ์์ด์ผ ํ์ง๋ง, ๊ธฐ์กด์ ์์ค ์ฝ๋๋ ๋ณ๊ฒฝํ์ง ์์์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๊ฐ๋ฐฉ-ํ์ ์์น์ ๋ชฉ์
- ์ ์ง๋ณด์์ฑ ํฅ์: ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์์คํ ์ ํ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์, ์์คํ ์ ์ ์ง๋ณด์์ฑ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
- ์ ์ฐ์ฑ ์ฆ๊ฐ: ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ์๊ตฌ์ฌํญ์ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์์ด, ์์คํ ์ ์ ์ฐ์ฑ์ด ์ฆ๊ฐํฉ๋๋ค.
- ์ฌ์ฌ์ฉ์ฑ ๋ฐ ํธํ์ฑ: ๊ธฐ์กด์ ๊ฒ์ฆ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉํ๋ฉด์๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ด, ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํธํ์ฑ์ด ๋์์ง๋๋ค.
๊ฐ๋ฐฉ-ํ์ ์์น์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ
- ์ถ์ํ์ ๋คํ์ฑ ์ฌ์ฉ
- ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ์จ๊ธฐ๊ณ , ๋คํ์ฑ์ ํตํด ํ์ฅ ๊ฐ๋ฅํ ๋ถ๋ถ์ ์ ์ํฉ๋๋ค.
- ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๋ ์๋ก์ด ํด๋์ค๋ฅผ ์ถ๊ฐํ์ฌ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ต๋๋ค.
- ์ ๋ต ํจํด(Strategy Pattern) ํ์ฉ
- ํน์ ๊ธฐ๋ฅ์ ์ธํฐํ์ด์ค๋ก ์ ์ํ๊ณ , ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์ฌ๋ฌ ์ ๋ต(๊ตฌํ์ฒด) ํด๋์ค๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ, ์คํ ์๊ฐ์ ๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด๋ ๊ธฐ๋ฅ์ ํ์ฅ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ํน์ ๊ธฐ๋ฅ์ ์ธํฐํ์ด์ค๋ก ์ ์ํ๊ณ , ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์ฌ๋ฌ ์ ๋ต(๊ตฌํ์ฒด) ํด๋์ค๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ, ์คํ ์๊ฐ์ ๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด๋ ๊ธฐ๋ฅ์ ํ์ฅ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ๋ฐ์ฝ๋ ์ดํฐ ํจํด(Decorator Pattern) ์ฌ์ฉ
- ๊ธฐ์กด ๊ฐ์ฒด์ ๊ธฐ๋ฅ์ ๋์ ์ผ๋ก ํ์ฅํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ด ํจํด์ ์ฌ์ฉํ๋ฉด, ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๋ ๊ฐ์ฒด์ ์ฑ
์์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด(Factory Method Pattern) ๋ฐ ์ถ์ ํฉํ ๋ฆฌ ํจํด(Abstract Factory Pattern) ์ ์ฉ
- ๊ฐ์ฒด ์์ฑ ๋ก์ง์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ถ๋ฆฌํ์ฌ, ์์คํ
์ ์๋ก์ด ํด๋์ค๋ฅผ ์ถ๊ฐํ๋๋ผ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์ ์์ด ๊ฐ์ฒด ์์ฑ์ด ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๊ฐ์ฒด ์์ฑ ๋ก์ง์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ถ๋ฆฌํ์ฌ, ์์คํ
์ ์๋ก์ด ํด๋์ค๋ฅผ ์ถ๊ฐํ๋๋ผ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์ ์์ด ๊ฐ์ฒด ์์ฑ์ด ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
Dependency Inversion Principle (์์กด๊ด๊ณ ์ญ์ ์์น)
๊ณ ์์ค ๋ชจ๋(์์ ๊ณ์ธต)์ด ์ ์์ค ๋ชจ๋(ํ์ ๊ณ์ธต)์ ๊ตฌํ์ ์ง์ ์์กดํ๋ ๊ฒ์ด ์๋๋ผ, ๋ ๋ค ์ถ์ํ์ ์์กดํด์ผ ํ๋ค๋ ์์น์ ๋๋ค.
- ์์กด๊ด๊ณ ์ญ์ ์์น์ ์ํํธ์จ์ด ๋ชจ๋๋ค์ ๋ถ๋ฆฌํ๋ ํน์ ํ์์ ์ง์นญํฉ๋๋ค.
- ์์ ๊ณ์ธต์ด ํ์ ๊ณ์ธต์ ์์กดํ๋ ์ ํต์ ์ธ ์์กด๊ด๊ณ๋ฅผ ๋ฐ์ (์ญ์ )์ํด์ผ๋ก์จ ์์ ๊ณ์ธต์ด ํ์ ๊ณ์ธต์ ๊ตฌํ์ผ๋ก ๋ถํฐ ๋ ๋ฆฝ๋๊ฒ ํ ์ ์์ต๋๋ค.
์์กด๊ด๊ณ ์ญ์ ์์น์ 2๊ฐ์ง ์ฃผ์ ์ฌํญ
- ๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ์์กดํด์๋ ์ ๋๋ค
- ๋ ๋ชจ๋ ๋ชจ๋ ์ถ์ํ์ ์์กดํด์ผ ํฉ๋๋ค. ๊ณ ์์ค ๋ชจ๋์ ์ ์ฑ ์ ๊ฒฐ์ ํ๊ณ , ์ ์์ค ๋ชจ๋์ ์ด๋ฌํ ์ ์ฑ ์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ์ ๊ณตํฉ๋๋ค.
- ๊ณ ์์ค ๋ชจ๋์ด ์ ์์ค ๋ชจ๋์ ๊ตฌํ์ ์์กดํ๋ฉด, ์ ์์ค ๋ชจ๋์ ๋ณ๊ฒฝ์ด ๊ณ ์์ค ๋ชจ๋์ ์ํฅ์ ๋ฏธ์น๊ฒ ๋ฉ๋๋ค.
- ์ถ์ํ๋ ์ธ๋ถ ์ฌํญ์ ์์กดํด์๋ ์ ๋๋ค
- ์ธ๋ถ ์ฌํญ์ด ์ถ์ํ์ ์์กดํด์ผ ํฉ๋๋ค. ์ด๋ ๊ณ ์์ค์ ์ ์ฑ ์ ์ค์ ํ๋ ์ถ์ํ๊ฐ, ์ ์์ค์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์ํฅ์ ๋ฐ์ง ์์์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
- ์ถ์ํ๋ ๋ณ๊ฒฝ์ ๊ฐํด์ผ ํ๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์ํด ์ํฅ์ ๋ฐ์ง ์์์ผ ํฉ๋๋ค.
์์กด๊ด๊ณ ์ญ์ ์์น์ ์ด์
- ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ ํฅ์: ๊ตฌํ ์ธ๋ถ ์ฌํญ์ด ์๋ ์ถ์ํ์ ์์กดํจ์ผ๋ก์จ, ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ์๊ตฌ์ฌํญ์ ์ถ๊ฐ๊ฐ ์ฉ์ดํด์ง๋๋ค.
- ์ ์ง๋ณด์์ฑ ์ฆ๊ฐ: ํ์ ๋ชจ๋์ ๋ณ๊ฒฝ์ด ์์ ๋ชจ๋์ ์ํฅ์ ๋ฏธ์น์ง ์์, ์์คํ ์ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋๋ค.
- ์ฌ์ฌ์ฉ์ฑ ๊ฐ์ : ์ถ์ํ๋ฅผ ํตํด ๊ณตํต์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ, ๋ค์ํ ์ํฉ์์ ์ฌ์ฌ์ฉ์ฑ์ด ๊ฐ์ ๋ฉ๋๋ค.
Example
Liskov Substitution Principle
์ด ์์น์ ํ์ ํ์ ์ ๊ฐ์ฒด๊ฐ ์์ ํ์ ์ ๊ฐ์ฒด์ ๋์ผํ๊ฒ ํ๋ํด์ผ ํ๋ค๋ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
- ์ปดํจํฐ ํ๋ก๊ทธ๋จ์์ ์๋ฃํ S๊ฐ ์๋ฃํ T์ ํ์ํ์ด๋ผ๋ฉด ํ์ํ ํ๋ก๊ทธ๋จ์ ์์ฑ(์ ํ์ฑ, ์ํํ๋ ์ ๋ฌด ๋ฑ)์ ๋ณ๊ฒฝ ์์ด ์๋ฃํ T์ ๊ฐ์ฒด๋ฅผ ์๋ฃํ S์ ๊ฐ์ฒด๋ก ๊ต์ฒด(์นํ)ํ ์ ์์ด์ผ ํ๋ค๋ ์์น์ ๋๋ค.
๋ฆฌ์ค์ฝํ ์นํ ์์น์ ํต์ฌ
- ํธํ์ฑ: ํ์ ํด๋์ค๋ ์์ ํด๋์ค์ ํ๋ ๊ท์ฝ๊ณผ ํธํ๋์ด์ผ ํฉ๋๋ค.
- ์ฆ, ์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ํ์ ํด๋์ค์ ์ธ์คํด์ค๋ก ๋์ฒดํด๋, ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ฅ์ด ๋ณํ์ง ์์์ผ ํฉ๋๋ค.
- ์นํ์ฑ: ์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ํ์ ํด๋์ค์ ์ธ์คํด์ค๋ก ์นํ(๊ต์ฒด)ํ ๋, ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ด ์ ์ง๋์ด์ผ ํฉ๋๋ค
๋ฆฌ์ค์ฝํ ์นํ ์์น์ ์ค์์ฑ
- ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ ํฅ์: ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ์๋ฒฝํ๊ฒ ํธํ๋๋ฉด, ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์์คํ ์ ์ ์ฐ์ฑ์ด ์ฆ๊ฐํฉ๋๋ค.
- ์ ์ง๋ณด์์ฑ ์ฆ๊ฐ: LSP๋ฅผ ์ค์ํ๋ ์ค๊ณ๋ ์์คํ
์ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ์์ ํด๋์ค์ ๋ณ๊ฒฝ์ด ํ์ ํด๋์ค์ ๋ถํ์ํ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉฐ, ํ์ ํด๋์ค๋ฅผ ์์ ํ์ฌ๋ ์์ ํด๋์ค์์ ํธํ์ฑ์ด ์ ์ง๋ฉ๋๋ค.
- ํ์ฅ์ฑ ๊ฐ์ : ์๋ก์ด ํ์ ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ํ์ ํด๋์ค๋ฅผ ์์ ํ ๋, ์ ์ฒด ์์คํ ์ ์์ ์ฑ๊ณผ ํธํ์ฑ์ ์ ์งํ๋ฉด์ ํ์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ ์ฉ ๋ฐฉ๋ฒ
- ์ธํฐํ์ด์ค ๋ถ๋ฆฌ: ์์ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ธ๋ถํํ์ฌ, ํ์ ํด๋์ค๊ฐ ํ์๋ก ํ๋ ๊ธฐ๋ฅ๋ง์ ์์๋ฐ๋๋ก ํฉ๋๋ค.
- ๊ณ์ฝ์ ์ํ ์ค๊ณ: ๋ฉ์๋๊ฐ ์๊ตฌํ๋ ์ฌ์ ์กฐ๊ฑด(preconditions)๊ณผ ์ฌํ ์กฐ๊ฑด(postconditions)์ ๋ช ํํ ์ ์ํ์ฌ, ์ด ๊ณ์ฝ์ ๋ชจ๋ ํ์ ํด๋์ค๊ฐ ์ค์ํ๋๋ก ํฉ๋๋ค.
Example
Interface Segregation (์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น)
ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กดํ์ง ์์์ผ ํ๋ค๋ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค
- ํฐ ๋ฉ์ด๋ฆฌ์ Interface ๋ฅผ ๊ตฌ์ฒด์ ์ด๊ณ ์์ ๋จ์๋ก ๋ถ๋ฆฌ์ํด ์ผ๋ก์จ Client๋ค์ด ๊ผญ ํ์ํ Method๋ค๋ง ์ด์ฉํ ์ ์๋๋ก ํด์ผํฉ๋๋ค.
์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น์ ํต์ฌ ํฌ์ธํธ
- ํด๋ผ์ด์ธํธ ํนํ ์ธํฐํ์ด์ค: ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ค์ ๋ก ์ฌ์ฉํ๋ ๋ฉ์๋๋ง์ ํฌํจํ๋ ์ธํฐํ์ด์ค์ ์์กดํด์ผ ํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ๋ถํ์ํ ์์กด์ฑ์ ์ ๊ฑฐํ์ฌ ์์คํ ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฅ๋๋ค.
- ์์ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌ: ํฌ๊ณ ์ผ๋ฐ์ ์ธ ์ธํฐํ์ด์ค๋ ๋ณด๋ค ๊ตฌ์ฒด์ ์ด๊ณ ์์ ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌ๋์ด์ผ ํฉ๋๋ค.
- ์ด ์์ ์ธํฐํ์ด์ค๋ค์ ํน์ ํด๋ผ์ด์ธํธ ๊ทธ๋ฃน์ ์๊ตฌ์ฌํญ์ ๋ ์ ํํ๊ฒ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น์ ์ด์
- ์ ์ฐ์ฑ ํฅ์: ํด๋ผ์ด์ธํธ์ ๋ง์ถคํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ, ์์คํ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ์๊ตฌ์ฌํญ์ ์ฝ๊ฒ ํตํฉํ ์ ์์ต๋๋ค.
- ์ ์ง๋ณด์์ฑ ์ฆ๊ฐ: ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กดํ์ง ์๊ธฐ ๋๋ฌธ์, ํ ์ธํฐํ์ด์ค์ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์ ๋ฏธ์น๋ ์ํฅ์ด ์ค์ด๋ค์ด ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋๋ค.
- ์ฌ์ฌ์ฉ์ฑ ๊ฐ์ : ๋ ์๊ณ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค. ํด๋ผ์ด์ธํธ๋ ํ์ํ ๊ธฐ๋ฅ๋ง์ ํฌํจํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ํํ์ฌ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ์ฆ๊ฐํฉ๋๋ค
Example
๋ฐ์ํ
'๐บ๏ธ Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Design Pattern] Factory Method Pattern - ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด (0) | 2024.04.08 |
---|---|
[Design Pattern] Factory Pattern - ํฉํ ๋ฆฌ ํจํด (0) | 2024.04.08 |
[Design Pattern] Object-Oriented Programming (OOP) (0) | 2024.03.28 |
[Design Pattern] Unified Modeling Language (UML) (0) | 2024.03.28 |
[Design Pattern] Design Pattern (0) | 2024.03.21 |