SOLID๋?
ํด๋ฆฐ์ฝ๋๋ก ์ ๋ช ํ ๋ก๋ฒํธ ๋งํด์ด ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น์ ์ ๋ฆฌํ ๊ฒ์ด๋ค.
- SRP : ๋จ์ผ ์ฑ ์ ์์น
- OCP : ๊ฐ๋ฐฉ-ํ์ ์์น
- LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น
- ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
- DIP : ์์กด๊ด๊ณ ์ญ์ ์์น
SRP(Single Responsibility Principle)
- ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค.
- ์ค์ํ ๊ธฐ์ค์ ๋ณ๊ฒฝ, ๋ณ๊ฒฝ์ด ์์ ๋ ํ๋์ ํด๋์ค๋ง ๋ณ๊ฒฝ๋๋ฉด ๊ต์ฅํ ์ ์งํจ ๊ฒ์ด๋ค.
→ ํ๋์ ํด๋์ค ์์ DB, SQL ์ฟผ๋ฆฌ๋ฌธ, View ๋ก์ง ...... ์ ์ง๋ณด์ ์ธก๋ฉด์์ ์ต์ ์ด๋ค.
OCP(Open/closed principle)
- ์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค ์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
- ๋ง์ฝ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ตฌํ์ฒด๋ฅผ ๋ง๋ ๋ค๋ฉด? (๋คํ์ฑ)
- ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ๋ฅผ ์๊ฐํด๋ณด์.
→ ๊ธฐ์กด ์ฝ๋๋ ๋ณ๊ฒฝ๋์ง ์๊ณ , ์๋ก์ด ๊ธฐ๋ฅ์ ํ์ฅ์ํฌ ์ ์๋ค.
LSP(Liskov Substitution Principle)
- ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค.
- ๋คํ์ฑ์์ ํ์ ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ท์ฝ์ ๋ค ์ง์ผ์ผ ํ๋ค๋ ๊ฒ, ๊ตฌํ์ฒด๋ฅผ ๋ฏฟ๊ณ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ด ์์น์ด ๊ผญ ํ์ํ๋ค.
- ์๋์ฐจ ์ธํฐํ์ด์ค์์ ์์ ์ด๋ผ๋ ๋ฉ์๋๊ฐ ์์ผ๋ก ๊ฐ๋ ๊ธฐ๋ฅ์ด๋ผ๋ ๊ท์ฝ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ํ๋ฉด ์ด๋ฅผ ๊ตฌํํ๋ ๋ชจ๋ ์ข ๋ฅ์ ์๋์ฐจ๋ ์ด ๊ท์ฝ(์์ผ๋ก ๊ฐ๋ ๊ธฐ๋ฅ)์ ์ง์ผ์ผ ํ๋ค.
ISP(Interface Segregation Principle)
- ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๋ซ๋ค.
- ๋ง์ฝ ์๋์ฐจ ์ธํฐํ์ด์ค๋ฅผ ์ด์ , ์ ๋น ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํ๊ณ ์ฌ์ฉ์ ํด๋ผ์ด์ธํธ๋ฅผ ์ด์ ์, ์ ๋น์ฌ ํด๋ผ์ด์ธํธ๋ก ๋ถ๋ฆฌํ๊ฒ ๋๋ค๋ฉด ์ ๋น ์ธํฐํ์ด์ค๊ฐ ๋ณ๊ฒฝ๋๋ค ํด๋ ์ด์ ์ ํด๋ผ์ด์ธํธ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
- ์ธํฐํ์ด์ค๊ฐ ๋ช ํํด์ง๊ณ , ๋์ฒด ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
DIP(Dependency Inversion Principle)
- ํ๋ก๊ทธ๋๋จธ๋ ์ถ์ํ์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค.
- ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ์ธํฐํ์ด์ค๋ง ์๊ณ ์์ผ๋ฉด ๋๋ค๋ ์๋ฏธ์ด๋ค.
- ๋ง์ฝ ๋ก๋ฏธ์ค ์ญํ ์ ๋งก์ ๋ฐฐ์ฐ๊ฐ ์ค๋ฆฌ์ฃ ์ญํ ๊ณผ ํฉ์ ๋ง์ถ๋ ๊ฒ์ด ์๋ ์ค๋ฆฌ์ฃ ์ญํ ์ ๋งก์ ํน์ ๋ฐฐ์ฐํ๊ณ ๋ง ํฉ์ ๋ง์ถ๊ฒ ๋๋ฉด ์ค๋ฆฌ์ฃ ์ญํ ๋ฐฐ์ฐ๋ฅผ ๋์ฒดํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์์ง๋ค.
- ์ญํ ์ ์์กดํด์ผ ํ๋ค.
๋คํ์ฑ๊ณผ SOLID
MemberRepository memberRepository = new JDBCMemberRepository();
- ๋คํ์ฑ๋ง์ผ๋ก๋ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ์ ๋ฐ์ ์๋ค.
- ๋คํ์ฑ๋ง์ผ๋ก๋ ๊ตฌ์ฒดํ์ ์์กดํ ์ ๋ฐ์ ์๋ค.
(OCP. DIP ์๋ฐ)
Spring๊ณผ OCP, DIP
- Spring์ ํ์ฉํ๋ฉด OCP, DIP๋ฅผ ์งํฌ ์ ์๋ค.
- DI ์ปจํ ์ด๋๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์, ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๊ฒ์ด๋ค.