[ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์] SOLID๋?
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์ด๋?
*๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฒด๋ค์ ์งํฉ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ํธ ์์ฉ์ ํํํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ์ทจ๊ธํ์ฌ ๊ฐ์ฒด ๋ด๋ถ์ ์ ์ธ๋ ๋ฉ์๋๋ฅผ ํ์ฉํ๋ *ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ผ๋ก ์ถ์ํ, ์บก์ํ, ์์์ฑ, ๋คํ์ฑ์ด๋ผ๋ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ด๋ฌํ ํน์ง๋ค๋ก ์ธํด ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
*ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋?
*๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)๋?
์ด๋ฌํ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ค๊ณํ ๋๋ SOLID ์์น์ ์ง์ผ์ฃผ์ด์ผ ํฉ๋๋ค.
SOLID๋?
SOLID๋ ๋ก๋ฒํธ ๋งํด์ด 2000๋ ๋ ์ด๋ฐ์ ๋ช ๋ช ํ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๋ฐ ์ค๊ณ์ ๋ค์ฏ ๊ฐ์ง ๊ธฐ๋ณธ ์์น์ ๋ง์ดํด ํจ๋์ค๊ฐ ๋๋ฌธ์์ด ๊ธฐ์ต์ ๋ก ์๊ฐํ ๊ฒ์ ๋๋ค.
- ํ๋ก๊ทธ๋๋จธ๊ฐ ์๊ฐ์ด ์ง๋๋ ์ ์ง ๋ณด์์ ํ์ฅ์ด ์ฌ์ด ์์คํ ์ ๋ง๋ค๊ฒ ํด์ค
- ์ ์์ผ ์ํํธ์จ์ด ๊ฐ๋ฐ๊ณผ ์ ์ํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ ๋ฐ์ ์ ๋ต์ ์ผ๋ถ
S๋ ๋จ์ผ ์ฑ ์ ์์น, O๋ ๊ฐ๋ฐฉ-ํ์ ์์น, L์ ๋ฆฌ์ค์ฝํ ์นํ ์์น, I๋ ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น, D๋ ์์กด ์ญ์ ์์น์ ์๋ฏธํฉ๋๋ค.
๋จ์ผ ์ฑ ์ ์์น(SRP, Single Responsibility Principle)
๋ชจ๋ ํด๋์ค๋ ๊ฐ๊ฐ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ ์์น์ ๋๋ค.
- ๋ณ๊ฒฝ์ด ์์ ๋ ํ๊ธ ํจ๊ณผ๊ฐ ์ ์ผ๋ฉด ์ข์
- ์๋ฅผ ๋ค์ด ๊ฐ์ฒด์ ์์ฑ ๋ถ๋ถ๊ณผ ์ฌ์ฉ ๋ถ๋ถ์ ๋ถ๋ฆฌํ๋ ๊ฒ
๊ฐ๋ฐฉ-ํ์ ์์น(OCP, Open Close Principle)
์ ์ง ๋ณด์ ์ฌํญ์ด ์๊ธด๋ค๋ฉด ์ฝ๋๋ฅผ ์ฝ๊ฒ ํ์ฅํ ์ ์๋๋ก ํ๊ณ ์์ ํ ๋๋ ๋ซํ ์์ด์ผ ํ๋ ์์น์ ๋๋ค.
- ๊ธฐ์กด์ ์ฝ๋๋ ์ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์๋ ํ์ฅ์ ์ฝ๊ฒ ํ ์ ์์ด์ผ ํจ
- ์๋ฅผ ๋ค์ด ๋คํ์ฑ์ ํ์ฉํด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์๋ก์ด ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค์ด ์๋ก์ด ๊ธฐ๋ฅ์ ๊ตฌํ
- ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ
- ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ๋ณ๋์ ์กฐ๋ฆฝ/์ค์ ์๊ฐ ํ์ํจ
๋ฆฌ์ค์ฝํ ์นํ ์์น(LSP, Liskov Substitution Principle)
ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ ๊ฒ์ ๋๋ค.
- ๋ถ๋ชจ ๊ฐ์ฒด์ ์์ ๊ฐ์ฒด๋ฅผ ๋ฃ์ด๋ ์์คํ ์ด ๋ฌธ์ ์์ด ๋์๊ฐ์ผ ํจ
- ๋คํ์ฑ์์ ํ์ ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ท์ฝ์ ๋ค ์ง์ผ์ผ ํ๋ค๋ ๊ฒ, ๋คํ์ฑ์ ์ง์ํ๊ธฐ ์ํ ์์น, ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ฅผ ๋ฏฟ๊ณ ์ฌ์ฉํ๋ ค๋ฉด LSP๊ฐ ์ถฉ์กฑ๋์ด์ผ ํจ
- ์๋ฅผ ๋ค์ด ์ปดํ์ผ์ ์ฑ๊ณตํด๋ ์ธํฐํ์ด์ค์ ๊ธฐ๋ฅ์ ๋ํ ๊ท์ฝ์ ์งํค์ง ์๊ฒ ๊ตฌํํ๋ค๋ฉด LSP๋ฅผ ์๋ฐ!
์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น(ISP, Interface Segregation Principle)
ํ๋์ ์ผ๋ฐ์ ์ธ ์ธํฐํ์ด์ค๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ์ฌ๋ฌ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ์์น์ ๋งํฉ๋๋ค.
- ์ธํฐํ์ด์ค๊ฐ ๋ช ํํด์ง๊ณ , ๋์ฒด ๊ฐ๋ฅ์ฑ์ด ๋์์ง
- ์๋ฅผ ๋ค์ด ์๋์ฐจ๋ ์ด์ /์ ๋น ๊ธฐ๋ฅ์ด ์๊ณ , ์ฌ์ฉ์๋ ์ด์ ์/์ ๋น์ฌ๋ก ๋ถ๋ฆฌํด๋๋ฉด ์ ๋น ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๊ฟ๋ ์ด์ ์์๋ ์ํฅ์ ๋ฏธ์น์ง ์์
์์กด ์ญ์ ์์น(DIP, Dependency Inversion Principle)
DIP์ ํต์ฌ ์๋ฆฌ๋ "์ถ์ํ์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค" ์ ๋๋ค. ์ฆ, ์์ ๋ณด๋ค ๋ณํ๊ธฐ ์ฌ์ด ๊ฒ์ ์์กดํ๋ ๊ฒ์ ์ถ์ํ๋ ์ธํฐํ์ด์ค๋ ์์ ํด๋์ค๋ฅผ ๋์ด ๋ณํ๊ธฐ ์ฌ์ด ๊ฒ์ ๋ณํ์ ์ํฅ๋ฐ์ง ์๊ฒ ํ๋ ์์น์ ๋งํฉ๋๋ค.
- ์์ ๊ณ์ธต์ ํ์ ๊ณ์ธต์ ๋ณํ์ ๋ํ ๊ตฌํ์ผ๋ก๋ถํฐ ๋ ๋ฆฝํด์ผ ํจ
- ๊ตฌํ ํด๋์ค์ ์์กดํ์ง ๋ง๊ณ ์ธํฐํ์ด์ค์ ์์กดํด์ผ ํจ (๊ตฌํ์ฒด์ ์์กดํ๊ฒ ๋๋ค๋ฉด ๋ณ๊ฒฝ์ด ์์ฃผ ์ด๋ ค์์ง๊ฒ ๋จ)
- ์์กด์ฑ ์ฃผ์ ์ DIP๋ฅผ ๋ฐ๋ฆ
- ์ญํ ์ ์์กดํ๊ฒ ํด์ผํจ
์ ๋ฆฌํ์๋ฉด, ๊ฐ์ฒด ์งํฅ์ ํต์ฌ์ ๋คํ์ฑ์ ํตํด ๋ณ๊ฒฝ์ ์ฉ์ดํ ๊ฐ๋ฐ์ ํ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง, ๋คํ์ฑ ๋ง์ผ๋ก๋ OCP, DIP๋ฅผ ์งํฌ ์ ์๊ธฐ ๋๋ฌธ์ ์คํ๋ง๊ณผ ๊ฐ์ด ๊ฐ์ฒด ์งํฅ ์ค๊ณ๋ฅผ ๋์์ฃผ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด ํด๊ฒฐํ ์ ์์ต๋๋ค.
[์ถ์ฒ] ๋ฉด์ ์ ์ํ CS ์ ๊ณต์ง์ ๋ ธํธ
http://www.yes24.com/Product/Goods/108887922
https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84)