๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ 5๋ ์์น - S.O.L.I.D.
SOLID๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด์ ์ง์ผ์ผํ๋ 5๋ ์์น์ด ์๋ค. SOLID ์์น์ ์ฒ ์ ํ ์งํค๋ฉด ์๊ฐ์ด ์ง๋๋ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ณ , ์ ์ง๋ณด์์ ํ์ฅ์ด ์ฌ์ด ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋๋ฐ ๋์์ด ๋๋ ๊ฒ์ผ๋ก ์๋ ค์ ธ์๋ค.
1.
SRP(๋จ์ผ ์ฑ
์ ์์น)
2.
OCP(๊ฐ๋ฐฉ-ํ์ ์์น)
3.
LSP(๋ฆฌ์ค์ฝํ ์นํ ์์น)
4.
DIP(์์กด ์ญ์ ์์น)
5.
ISP(์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น)
๋๋ ์ฐ์ ๊ฐ ์์น๋ค์ด ๋ฌด์์ธ์ง๋ถํฐ ๋ฐฐ์์ผ ํ๋ค.
[1] ๋จ์ผย ์ฑ ์์ย ์์น (SRP,ย Singleย Responsibilityย Principle)
๋ชจ๋ ํด๋์ค๋ ๊ฐ๊ฐ ํ๋์ ์ฑ
์๋ง ๊ฐ์ ธ์ผ ํ๋ค. ํด๋์ค๋ ๊ทธ ์ฑ
์์ ์์ ํ ์บก์ํํด์ผ ํจ์ ๋งํ๋ค.
โข
์ฌ์น์ฐ์ฐ ํจ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ณ์ฐ ํด๋์ค๊ฐ ์๋ค๊ณ ์น์. ์ด ์ํ์ ๊ณ์ฐ ํด๋์ค๋ ์ค์ง ์ฌ์น์ฐ์ฐ ๊ธฐ๋ฅ๋ง์ ์ฑ
์์ง๋ค. ์ด ํด๋์ค๋ฅผ ์์ ํ๋ค๊ณ ํ๋ค๋ฉด ๊ทธ ์ด์ ๋ ์ฌ์ง์ฐ์ฐ ํจ์์ ๊ด๋ จ๋ ๋ฌธ์ ์ผ ๋ฟ์ด๋ค.
[2] ๊ฐ๋ฐฉ-ํ์ ์์น (OCP, Open Closed Principle)
ํ์ฅ์๋ ์ด๋ ค์๊ณ ์์ ์๋ ๋ซํ์๋. ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์( Closed), ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋๋ก(Open) ์ค๊ณ๊ฐ ๋์ด์ผ ํ๋ค๋ ์์น์ ๋งํ๋ค.
โข
์บ๋ฆญํฐ๋ฅผ ํ๋ ์์ฑํ๋ค๊ณ ํ ๋, ๊ฐ๊ฐ์ ์บ๋ฆญํฐ๊ฐ ์์ง์์ด ๋ค๋ฅผ ๊ฒฝ์ฐ ์์ง์์ ํจํด ๊ตฌํ์ ํ์ ํด๋์ค์ ๋งก๊ธด๋ค๋ฉด ์บ๋ฆญํฐ ํด๋์ค์ ์์ ์ ํ์๊ฐ์๊ณ (Closed) ์์ง์์ ํจํด๋ง ์ฌ์ ์ ํ๋ฉด ๋๋ค.(Open)
[3] ๋ฆฌ์ค์ฝํ ์นํ ์์น (LSP, Liskov Substitution Principle)
์์ ํด๋์ค๋ ์ธ์ ๋ ์์ ์ ๋ถ๋ชจ ํด๋์ค๋ฅผ ๋์ฒดํ ์ ์๋ค๋ ์์น์ด๋ค. ์ฆ ๋ถ๋ชจ ํด๋์ค๊ฐ ๋ค์ด๊ฐ ์๋ฆฌ์ ์์ ํด๋์ค๋ฅผ ๋ฃ์ด๋ ๊ณํ๋๋ก ์ ์๋ํด์ผ ํ๋ค.
์์ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ์ฑ
์์ ๋ฌด์ํ๊ฑฐ๋ ์ฌ์ ์ํ์ง ์๊ณ ํ์ฅ๋ง ์ํํ๋๋ก ํด์ผ LSP๋ฅผ ๋ง์กฑํ๋ค.
[4] ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (ISP, Interface Segregation Principle)
ํ ํด๋์ค๋ ์์ ์ด ์ฌ์ฉํ์ง์๋ ์ธํฐํ์ด์ค๋ ๊ตฌํํ์ง ๋ง์์ผ ํ๋ค. ํ๋์ ์ผ๋ฐ์ ์ธ ์ธํฐํ์ด์ค๋ณด๋ค ์ฌ๋ฌ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค๊ฐ ๋ซ๋ค.
[5] ์์กด ์ญ์ ์์น (DIP, Dependency Inversion Principle)
์์กด ๊ด๊ณ๋ฅผ ๋งบ์ ๋ ๋ณํํ๊ธฐ ์ฌ์ด ๊ฒ ๋๋ ์์ฃผ ๋ณํํ๋ ๊ฒ๋ณด๋ค๋ ๋ณํํ๊ธฐ ์ด๋ ค์ด ๊ฒ, ๊ฑฐ์ ๋ณํ๊ฐ ์๋ ๊ฒ์ ์์กดํ๋ผ๋ ๊ฒ์ด๋ค. ํ๋ง๋๋ก ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ณด๋ค ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค์ ๊ด๊ณ๋ฅผ ๋งบ์ผ๋ผ๋ ๊ฒ์ด๋ค.