SRP: ๋จ์ผ ์ฑ ์ ์์น(singleresponsibilityprinciple)
ํ๋์ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ ธ์ผ ํ๋ค!!
โ ๏ธ ์ค์ํ ๊ธฐ์ค์ ๋ณ๊ฒฝ์ด๋ค . ๋ณ๊ฒฝ์ด ์์ ๋ ํ๊ธ ํจ๊ณผ๊ฐ ์ ์ผ๋ฉด ๋จ์ผ ์ฑ
์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ์ด๋ค.
ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๋ ์ด์ ๋ํ ํ๊ฐ์ง ๋ฟ ์ด์ด์ผ ํ๋ค!
OCP: ๊ฐ๋ฐฉ-ํ์ ์์น (Open/closed principle)
์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค ์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค!!
MemberService๋ผ๋ ํด๋ผ์ด์ธํธ ์ฝ๋์์ ์ธํฐํ์ด์ค์ธ memberRepository์ ์์กด์ ํ๊ณ ์์ง๋ง ๋์์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ MemoryMemberRepository, JdbcMemberRepostiory ๊ตฌํ ํด๋์ค์๋ ์์กดํ๊ณ ์๋ค. ๊ฒฐ๊ตญ์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ๋๋ ๊ฒ์ด๊ณ ๋คํ์ฑ์ ์ฌ์ฉํ์์๋ OCP ์์น์ ์งํฌ์ ์๋ ์
์ด๋ค.
LSP: ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov substitution principle)
ํ๋ก๊ทธ๋จ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค!!
๋คํ์ฑ์ ์ง์ํ๊ธฐ ์ํ ์์น์ผ๋ก ์๋ธ ํ์
์ ์ธ์ ๋ ์์ ์ ๊ธฐ๋ฐ(์์) ํ์
์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ค.
์ฆ ๋ถ๋ชจ ํด๋์ค๊ฐ ๋ค์ด๊ฐ ์๋ฆฌ์ ์์ํด๋์ค๋ก ๋์ฒดํด๋ ์ ๋์ํด์ผ ํ๋ค
ISP: ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface segregation principle)
๐ ์๋์ฐจ ์ธํฐํ์ด์ค -> ์ด์ ์ธํฐํ์ด์ค, ์ ๋น ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌ
๐จ๐ปโ๐ง ์ฌ์ฉ์ ํด๋ผ์ด์ธํธ -> ์ด์ ์ ํด๋ผ์ด์ธํธ, ์ ๋น์ฌ ํด๋ผ์ด์ธํธ๋ก ๋ถ๋ฆฌ
๐๐ป ๋ถ๋ฆฌํ ๊ฒฝ์ฐ ์ ๋น ์ธํฐํ์ด์ค ์์ฒด๊ฐ ๋ณํด๋ ์ด์ ์ ํด๋ผ์ด์ธํธ์๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กด๊ด๊ณ๋ฅผ ๋งบ์ผ๋ฉด ์๋๋ค.
๋ณดํต ์ํํธ์จ์ด ์ค๊ณ ์ SRP์ ISP ์ค ํ๋๋ฅผ ์ ํํ๋ค.
DIP: ์์กด๊ด๊ณ ์ญ์ ์์น (Dependency inversion principle)
ํ๋ก๊ทธ๋๋จธ๋ "์ถ์ํ(์ธํฐํ์ด์ค)์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ(๊ตฌํํด๋์ค)์ ์์กดํ๋ฉด ์๋๋ค." ๋ค์์ ์ ๋ฆฌํ ์์กด์ฑ ์ฃผ์ ์ ์ด ์์น์ ๋ฐ๋ฅด๋ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค.
์์์ ์ญํ ๊ณผ ๊ตฌํ์ด๋ผ๋ ์ด์ผ๊ธฐ๋ฅผ ํ๋ค. ๐ฎโ๐จ๊ตฌํ์ ์์กดํ ๊ฒฝ์ฐ ๋ณ๊ฒฝ์ด ์ ๋ง ์ด๋ ค์์ง๊ธฐ ๋๋ฌธ์ ์ญํ (์ธํฐํ์ด์ค or ์ถ์ํด๋์ค)์ ์์กดํด์ผํ๋ค.