๐ ์ด ๊ธ์ ์ธํ๋ฐ์์ ์ ๊ณตํ๋ ๋ฐ์ฐ๋น๋์ "ํด๋ฆฐ ์ฝ๋ & ํ ์คํธ ์ฝ๋ ๊ฐ์ด๋ ๋ก๋๋งต" ๊ฐ์๋ฅผ ์๊ฐํ๋ฉด์ ์ ๋ฆฌํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์ ๋๋ค.
https://www.inflearn.com/roadmaps/5699
ํด๋ฆฐ ์ฝ๋ & ํ ์คํธ ์ฝ๋ ๊ฐ์ด๋ ๋ก๋๋งต ๋ก๋๋งต - ์ธํ๋ฐ
Spring, TDD ์คํฌ์ ํ์ตํ ์ ์๋ ๋ก๋๋งต์ ์ธํ๋ฐ์์ ๋ง๋๋ณด์ธ์.
www.inflearn.com
SOLID
๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ ์ฐํ๊ฒ ํํ๋ก ํ ์ ์๋๋ก ๋์์ ์ฃผ๋ 5๊ฐ์ง ์์น
- SRP : Single Responsibility Principle
- OCP : Open-Closed Principle
- LSP : Liskov Substitution Principle
- ISP : Interface Segregation Principle
- DIP : Dependenty Inversion Principle
๋จ์ผ์ฑ ์์์น SRP : Single Responsibility Principle
ํ๋์ ํด๋์ค๊ฐ ํ๋์ ์ฑ ์๋ง ๊ฐ๋๋ก ์ค๊ณ๋ฅผ ํ๋ผ๋ ์์น
- ํ๋์ ํด๋์ค๊ฐ ๋ณ๊ฒฝ ์ด์ ๊ฐ ๋๊ฐ์ง๋ผ๋ฉด, ํด๋น ํด๋์ค์ ์ฑ ์์ 2๊ฐ ์ด์์ธ ๊ฒ.
- ๊ฐ์ฒด๊ฐ ๊ฐ์ง ๊ณต๊ฐ ๋ฉ์๋, ํ๋, ์์ ๋ฑ์ ํด๋น ๊ฐ์ฒด์ ๋จ์ผ ์ฑ ์์ ์ํด์๋ง ๋ณ๊ฒฝ๋์ด์ผ ํจ
์ด์ : SRP ๋ฅผ ์งํค๊ฒ ๋๋ฉด ๋์ ์์ง๋๋ฅผ ๊ฐ์ง๊ฒ ๋๊ณ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ์ง๊ณ ๋๋ค.
- ์์ง๋ : ํด๋์ค๋ ๋ชจ๋ ๋ด์ ์์๋ค์ด ๊ธด๋ฐํ๊ฒ ์ฐ๊ด๋์ด ์๋ ์ ๋
- ๊ฒฐํฉ๋ : ๋๊ฐ ์ด์์ ๊ฐ์ฒด๊ฐ ํ๋ ฅํ์ ๋ ํ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋์์๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ์ํฅ์ ๋ฏธ์น๋ ์ ๋
๊ฐ๋ฐฉ-ํ์ ์์น OCP : Open-Closed Principle
ํ์ฅ์๋ ์ด๋ ค์๊ณ , ์์ ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
- ์๋ก์ด ์๊ตฌ์ฌํญ์ด ์ถ๊ฐ๋์์ ๋, ๊ธฐ์กด ์ฝ๋์ ๋ณ๊ฒฝ ์์ด, ์์คํ ์ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ด์ผ ํ๋ค.
์ด๋ป๊ฒ OCP ๋ฅผ ์งํฌ ์ ์๋ ? >> ์ถ์ํ์ ๋คํ์ฑ์ ํ์ฉํด์ OCP ๋ฅผ ์งํฌ ์ ์๋ค.
๋ฆฌ์ค์ฝํ ์นํ ์์น LSP : Liskov Substitution Principle
๋ฆฌ์ค์ฝํ : ๋ฐ๋ฐ๋ผ ๋ฆฌ์ค์ฝํ(์ฌ๋ ์ด๋ฆ)
์์ ๊ตฌ์กฐ์์ ๋ถ๋ชจ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ ํด๋์ค์ ์ธ์คํด์ค๋ก ์นํํ ์ ์์ด์ผ ํ๋ค.
- ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ์ฑ ์์ ์ค์ํ๋ฉฐ, ๋ถ๋ชจ ํด๋์ค์ ํ๋์ ๋ณ๊ฒฝํ์ง ์์์ผ ํ๋ค.
์ด์ : LSP ๋ฅผ ์๋ฐํ๋ฉด, ์์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋ ์์ธ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๋ถํ์ํ ํ์ ์ฒดํฌ๊ฐ ๋๋ฐ๋ ์ ์๋ค. ๋ฐ๋ผ์ ์์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด LSP ๋ฅผ ์ ์งํค๋ ํํ๋ก ๊ตฌํํด์ผํ๋ค.
์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น ISP : Interface Segregation Principle
ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค์ ์์กดํ๋ฉด ์๋๋ค.
- ์ธํฐํ์ด์ค๋ฅผ ์๊ฒ ์ชผ๊ฐ๋ ๊ฒ์ด ๊ถ์ฅ๋จ(=๊ธฐ๋ฅ๋จ์๋ก ์ธํฐํ์ด์ค๋ฅผ ์๊ฒ ๋๋์ด ์ฌ์ฉํด๋ผ)
์ด์ : ์ธํฐํ์ด์ค ํ๋๊ฐ ๋๋ฌด ๋ฌด๊ฒ๊ณ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ์ด ํฉ์ณ์ ธ์๊ฒ ๋๋ฉด ๊ตฌํ์ฒด์์ ๋ถํ์ํ ๊ธฐ๋ฅ๊น์ง ๊ตฌํํ๊ฒ ๋์ด๋ฒ๋ฆฐ๋ค. ๋ถํ์ํ ์์กด์ฑ์ผ๋ก ์ธํด ๊ฒฐํฉ๋๊ฐ ๋์์ง๊ณ , ํน์ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝ์ด ์ฌ๋ฌ ํด๋์ค์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
์์กด์ฑ ์ญ์ ์์น : DIP : Dependenty Inversion Principle
์์ ์์ค์ ๋ชจ๋์ ํ์ ์์ค์ ๋ชจ๋์ ์์กดํด์๋ ์๋๊ณ , ๋ ๋ชจ๋ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค๋ ์์น (= ์ถ์ํ ๋ ๋ฒจ์ด ๋์ ์ชฝ์ ๋ชจ๋์ด ๊ตฌ์ฒด ์ชฝ์ ๊ฐ๊น์ด ๋ชจ๋์ ์ง์ ์ ์ผ๋ก ์์กดํด์๋ ์๋๋ค. ๋ชจ๋ ์ถ์ํ์ ์์กดํ์)
- ์์กด์ฑ์ ์๋ฐฉํฅ : ๊ณ ์์ค ๋ชจ๋์ด ์ ์์ค ๋ชจ๋์ ์ฐธ์กฐํ๋ ๊ฒ
- ์์กด์ฑ์ ์ญ๋ฐฉํฅ : ๊ณ ์์ค, ์ ์์ค ๋ชจ๋์ด ๋ชจ๋ ์ถ์ํ์ ์์กดํ๋ ๊ฒ
- ์์กด์ฑ : ํ๋์ ๋ชจ๋์ด ๋ค๋ฅธ ํ๋์ ๋ชจ๋์ ์ฐธ์กฐํ๊ฑฐ๋, ์ง์ ์ ์ผ๋ก ์์ฑํ๊ฑฐ๋, ์ฌ์ฉํ๋ ๊ฒ
- ์ ์์ค ๋ชจ๋์ด ๋ณ๊ฒฝ๋์ด๋, ๊ณ ์์ค ๋ชจ๋์๋ ์ํฅ์ด ๊ฐ์ง ์๋๋ค.
์ด์ : ์ ์์ค ๋ชจ๋์ ์์ฃผ ๋ณ๊ฒฝ๋๋๋ฐ, DIP ์์น์ ์งํค๋ฉด ์ ์์ค ๋ชจ๋์ด ์์ ๋กญ๊ฒ ๋ณ๊ฒฝ๋์ด๋ ๊ณ ์์ค ๋ชจ๋์๋ ์ํฅ์ด ๊ฐ์ง ์๋๋ค.