/* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค. */
์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข
www.inflearn.com
SOLID
* ํด๋ฆฐ์ฝ๋๋ก ์ ๋ช ํ ๋ก๋ฒํธ ๋งํด์ด ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น์ ์ ๋ฆฌ
- SRP : ๋จ์ผ ์ฑ ์ ์์น (Single Responsibility Principle)
- OCP : ๊ฐ๋ฐฉ-ํ์ ์์น (Open / Closed Principle)
- LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov Substitution Principle)
- ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface Segregation Principle)
- DIP : ์์กด๊ด๊ณ ์ญ์ ์์น (Dependency Inversion Principe)
1. SRP (๋จ์ผ ์ฑ ์ ์์น)
โพ ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค.
(์ฌ๊ธฐ์ ํ๋์ ์ฑ ์์ด๋ผ๋ ๊ฒ์ ๋ชจํธํ๊ธฐ ๋๋ฌธ์ ๋ฒ์์ ๋จ์๋ฅผ ์ ์ ํ ์ ์กฐ์ ํด์ผํจ.)
โ ํ ํด๋์ค๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ๋น์ฆ๋์ค ๋ก์ง, ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ฒ๋ฆฌ ๋ฑ ๋ค์ํ ์ฑ
์์
๊ฐ์ง๊ณ ์๋ค๋ฉด ์ด๊ฒ์ SRP๋ฅผ ์๋ฐํ๋ค๊ณ ๋ณผ ์ ์๋ค.
โพ ์ค์ํ ๊ธฐ์ค์ ๋ณ๊ฒฝ์ด๋ค. ๋ณ๊ฒฝ์ด ์์ ๋ ํ๊ธ ํจ๊ณผ๊ฐ ์ ์ผ๋ฉด ๋จ์ผ ์ฑ ์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ
ex ) UI๋ณ๊ฒฝ, ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ฌ์ฉ์ ๋ถ๋ฆฌ
โ ํน์ ์ฑ ์๋ง ๊ฐ์ง ๊ฒฝ์ฐ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋๋ฒ๊น ํ๋ ๊ฒ์ด ์ฌ์์ง๋ฉฐ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํด
2. OCP (๊ฐ๋ฐฉ-ํ์ ์์น)
โพ ์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค ์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
โ ๊ธฐ์กด์ ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์์ด์ผ ํ๋ค.
โพ ์๋์ ์์์ฒ๋ผ ์ธํฐํ์ด์ค์ ๋คํ์ฑ์ ์ฌ์ฉํ์ฌ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํด์ผ ํ๋ค.
โ ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ด๋ฏธ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ฑฐ๋ ์์๋ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ตฌํ
3. LSP (๋ฆฌ์ค์ฝํ ์นํ ์์น)
โพ ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค.
โพ ๋คํ์ฑ์์ ํ์ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ท์ฝ์ ๋ค ์ง์ผ์ผ ํ๋ค๋ ๊ฒ, ๋คํ์ฑ์ ์ง์ํ๊ธฐ ์ํ ์์น, ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ ๋ฏฟ๊ณ ์ฌ์ฉํ๋ ค๋ฉด ์ด ์์น์ด ํ์ํ๋ค.
โพ ๋จ์ํ ์ปดํ์ผ์ ์ฑ๊ณตํ๋ ๊ฒ์ ๋์ด์๋ ์ด์ผ๊ธฐ
ex ) ์๋์ฐจ ์ธํฐํ์ด์ค์ ์์ ์ ์์ผ๋ก ๊ฐ๋ ๊ธฐ๋ฅ ์ผ ๋, ์ฌ๊ธฐ์ ๋ค๋ก ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก ๋ง๋ค ์๋ ์๊ณ ๊ทธ๋ ๊ฒ ํ๋๋ผ๋ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋์ง ์์. ๊ทธ๋ฌ๋ LSP์์น์ ์ปดํ์ผ ๋จ๊ณ๋ฅผ ์๊ธฐํ๋๊ฒ์ด ์๋.
์ธํฐํ์ด์ค์ ์์ ๊ท์ฝ์ ๋ฌด์กฐ๊ฑด ์์ผ๋ก ๊ฐ์ผ๋๊ธฐ ๋๋ฌธ์ ๊ทธ ๊ธฐ๋ฅ์ ๋ํด ๋ณด์ฅ์ ํด์ค์ผ ํจ.
โ ๋ค๋ก ๊ฐ๋ค๋ฉด LSP์์น ์๋ฐ
4. ISP (์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น)
โพ ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๋ซ๋ค.
ex ) ์๋์ ์ธํฐํ์ด์ค : ์ด์ ์ธํฐํ์ด์ค, ์ ๋น ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌ.
์ฌ์ฉ์ ํด๋ผ์ด์ธํธ : ์ด์ ์ ํด๋ผ์ด์ธํธ, ์ ๋น์ฌ ํด๋ผ์ด์ธํธ๋ก ๋ถ๋ฆฌ.
์ด๋ ๊ฒ ๋ถ๋ฆฌ ํ์ ๋ ์ ๋น์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๋ฐ๊ฟ ๊ฒฝ์ฐ ์ ๋น ์ธํฐํ์ด์ค์ ์ ๋น์ฌ ์ธํฐํ์ด์ค๋ง ๋ฐ๊พธ๋ฉด ๋จ.
โ ์ด์ ์ ํด๋ผ์ด์ธํธ์ ์ํฅ์ ์ฃผ์ง ์์ !
โพ ์ธํฐํ์ด์ค๊ฐ ๋ช ํํด์ง๊ณ , ๋์ฒด ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
5. DIP (์์กด๊ด๊ณ ์ญ์ ์์น)
โพ ํ๋ก๊ทธ๋๋จธ๋ "์ถ์ํ์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค"์ ์์น์ ๋ฐ๋ฅด๋ ๋ฐฉ๋ฒ ์ค ํ๋
โ ๊ตฌํ ํด๋์ค์ ์์กดํ์ง๋ง๊ณ , ์ธํฐํ์ด์ค์ ์์กดํ๋ผ๋ ๋ป = ์ญํ ์ ์์กดํด์ผ ํ๋ค.
โ ์๋น์ด ๊นํํฌ๋๋ง ๊ณต์ฐ ์ฐ์ต์ ํ๋ค๊ณ ํด์ ์กํ๊ต๋ ๊ณต์ฐํ๊ธฐ ํ๋ค๋ฉด ์๋จ. ์๋๋ฐฐ์ฐ(=๊ตฌํ์ฒด)์ ์์กดํ์ง ๋ง๊ณ ์์ ์ ๋๋ณธ(=์ญํ )์ ์์กดํด์ ์ธ์ ๋ ์ง ๋ค๋ฅธ ๋ฐฐ์ฐ์ ๊ณต์ฐ์ด ๊ฐ๋ฅํ๋๋ก ์ญํ ๊ณผ ๊ตฌํ์ ์ฒ ์ ํ๊ฒ ๋ถ๋ฆฌํด์ผ ํจ.
๊ฒฐ๋ก
โพ ๊ฐ์ฒด ์งํฅ์ ํต์ฌ์ ๋คํ์ฑ
But, ๋คํ์ฑ ๋ง์ผ๋ก๋ ์ฝ๊ฒ ๋ถํ์ ๊ฐ์ ๋ผ์ฐ๋ฏ ๊ฐ๋ฐํ ์ ์๋ค.
(๋คํ์ฑ ๋ง์ผ๋ก๋ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ ํจ๊ป ๋ณ๊ฒฝ๋๋ค.)
โพ ๋คํ์ฑ ๋ง์ผ๋ก๋ OCP, DIP๋ฅผ ์งํฌ ์ ์๋ค.
๋ค์ ์คํ๋ง์ผ๋ก
โพ ์คํ๋ง์ ๋ค์๊ธฐ์ ๋ก ๋คํ์ฑ + OCP, DIP๋ฅผ ๊ฐ๋ฅํ๊ฒ ์ง์
- DI(Dependency Injection) : ์์กด๊ด๊ณ, ์์กด์ฑ ์ฃผ์
- DI ์ปจํ ์ด๋ ์ ๊ณต
โพ ํด๋ผ์ด์ธํธ ์ฝ๋์ ๋ณ๊ฒฝ ์์ด ๊ธฐ๋ฅ ํ์ฅ
โพ ์ฝ๊ฒ ๋ถํ์ ๊ต์ฒดํ๋ฏ์ด ๊ฐ๋ฐ
์ ๋ฆฌ
โพ ๋ชจ๋ ์ค๊ณ์ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ์.
ex ) ์์ ๋์๋ ๊ณต์ฐ์ ์์์ฒ๋ผ ๋ฐฐ์ญ๋ง ๋ง๋ค์ด๋๊ณ ๋ฐฐ์ฐ๋ ์ธ์ ๋ ์ง ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋๋ก ์ค๊ณ
โพ ์ด์์ ์ผ๋ก๋ ๋ชจ๋ ์ค๊ณ์ ์ธํฐํ์ด์ค๋ฅผ ๋ถ์ฌํ์
(์ธํฐํ์ด์ค๋ฅผ ๋จผ์ ์ค๊ณํ๊ณ ๊ตฌํ์ ๋์ค์ ์ ํ๊ฒ ๋๋ฉด ๊ตฌํ ๊ธฐ์ ์ด ๋ฐ๋๋๋ผ๋ ๋ณ๊ฒฝ ๋ฒ์๊ฐ ์๊ณ ์ ์ฐํด์ง.)
But, ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋ฉด ์ถ์ํ๋ผ๋ ๋น์ฉ์ด ๋ฐ์ํจ.
โ ๊ธฐ๋ฅ์ ํ์ฅํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด ๊ตฌ์ฒด ํด๋์ค๋ฅผ ์ง์ ์ฌ์ฉํ๊ณ , ํฅํ ๊ผญ ํ์ํ ๋ ๋ฆฌํฉํฐ๋งํด์ ๋์ ํ๋ ๊ฒ๋ ๋ฐฉ๋ฒ.
โพ ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค.
โพ ๋คํ์ฑ์์ ํ์ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ท์ฝ์ ๋ค ์ง์ผ์ผ ํ๋ค๋ ๊ฒ, ๋คํ์ฑ์ ์ง์ํ๊ธฐ ์ํ ์์น, ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ ๋ฏฟ๊ณ ์ฌ์ฉํ๋ ค๋ฉด ์ด ์์น์ด ํ์ํ๋ค.
โพ ๋จ์ํ ์ปดํ์ผ์ ์ฑ๊ณตํ๋ ๊ฒ์ ๋์ด์๋ ์ด์ผ๊ธฐ
ex ) ์๋์ฐจ ์ธํฐํ์ด์ค์ ์์ ์ ์์ผ๋ก ๊ฐ๋ ๊ธฐ๋ฅ ์ผ ๋, ์ฌ๊ธฐ์ ๋ค๋ก ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก ๋ง๋ค ์๋ ์๊ณ ๊ทธ๋ ๊ฒ ํ๋๋ผ๋ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋์ง ์์. ๊ทธ๋ฌ๋ LSP์์น์ ์ปดํ์ผ ๋จ๊ณ๋ฅผ ์๊ธฐํ๋๊ฒ์ด ์๋.
์ธํฐํ์ด์ค์ ์์ ๊ท์ฝ์ ๋ฌด์กฐ๊ฑด ์์ผ๋ก ๊ฐ์ผ๋๊ธฐ ๋๋ฌธ์ ๊ทธ ๊ธฐ๋ฅ์ ๋ํด ๋ณด์ฅ์ ํด์ค์ผ ํจ.
โ ๋ค๋ก ๊ฐ๋ค๋ฉด LSP์์น ์๋ฐ