์ด๋ฒ ํฌ์คํ ์์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ฑ๊ณผ ์ฅ์ ์ ์ต๋ํ์ผ๋ก ๋์ด์ฌ๋ฆฌ๊ธฐ ์ํด ํ๋ก๊ทธ๋จ์ ์ด๋ป๊ฒ ์ค๊ณํด์ผ ํ๋ ์ง์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ๋ค๋ค๋ณธ๋ค.
๊ฐ์ฒด์งํฅ ์ค๊ณ๊ณผ์
- ์๊ตฌ์ฌํญ (์ ๊ณตํด์ผ ํ ๊ธฐ๋ฅ) ์ ์ฐพ๊ณ ์ธ๋ถํ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ธฐ๋ฅ์ ์๋ง์ ๊ฐ์ฒด๋ก ํ ๋นํ๋ค.
- ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด์ ์ถ๊ฐํ๋ค.
- ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. (๊ธฐ๋ฅ์ ์ต๋ํ ์บก์ํ)
- ๊ฐ์ฒด ๊ฐ์ ์ด๋ป๊ฒ ๋ฉ์๋ ํธ์ถ์ ์ฃผ๊ณ ๋ฐ์ ์ง ๊ฒฐ์ ํ๋ค.
๊ฐ์ฒด์งํฅ ์ค๊ณ์์น
SRP (Single Responsibility) ๋จ์ผ ์ฑ ์ ์์น
- ํด๋์ค๋ ๋จ ํ๊ฐ์ ์ฑ ์์ ๊ฐ์ ธ์ผ ํจ
- ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๋ ์ด์ ๋ ๋จ ํ๋์ฌ์ผ ํจ
- ์ด๋ฅผ ์งํค์ง ์์ผ๋ฉด, ํ ์ฑ
์์ ๋ณ๊ฒฝ์ ์ํด ๋ค๋ฅธ ์ฑ
์๊ณผ ๊ด๋ จ๋ ์ฝ๋์ ์ํฅ์ ๋ฏธ์น ์ ์์
→ ์ด๋ ๊ฒ ๋๋ฉด ์ ์ง๋ณด์๊ฐ ๋งค์ฐ ๋นํจ์จ์
๐ค ์ฑ ์ ์ด๋ผ๋ ๋ง์ด ๋๋ฌด ์ถ์์ ์ด๋ค..
SRP ์์ ์ด์ผ๊ธฐํ๋ ์ฑ ์์ด๋, '๊ธฐ๋ฅ' ์ ๋๋ก ์๊ฐํ๋ฉด ๋๋ค. ๋ง์ฝ ํ ํด๋์ค๊ฐ ์ํํ ์ ์๋ ๊ธฐ๋ฅ (์ฑ ์) ์ด ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด, ํด๋์ค ๋ด๋ถ์ ํจ์๋ผ๋ฆฌ ๊ฐํ ๊ฒฐํฉ์ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค. ์์ง๋๋ ๋๊ณ ๊ฒฐํฉ๋๋ ๋ฎ์ ํ๋ก๊ทธ๋จ์ ์ค๊ณํ๋ ๊ฒ์ด ๋น๋ก์ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ํต์ฌ์ธ๋ฐ, ์ด๊ฒ์ด ์๋ฐ๋๋ ๊ฒ์ด๋ค. ์๋ก์ด ์๊ตฌ์ฌํญ์ด๋ ํ๋ก๊ทธ๋จ ๋ณ๊ฒฝ์ ์ํด ํด๋์ค ๋ด๋ถ์ ๋์๋ค์ด ์ฐ์์ ์ผ๋ก ๋ณ๊ฒฝ๋์ด์ผ ํ ์๋ ์๋ค. ์ด๋ ์ ์ง๋ณด์๊ฐ ๋นํจ์จ์ ์ด๋ฏ๋ก, ์ฑ ์์ ์๊ฒ ์ชผ๊ฐ์ด ๋ถ๋ฆฌ์ํฌ ํ์๊ฐ ์๋ค.
์๋ฅผ ๋ค์ด ์ด๋ค ํด๋์ค๋ด์ A ๋ผ๋ ๋ฉ์๋๊ฐ ์๊ณ , ์ด A ๋ฉ์๋๋ A ๋ฉ์๋์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก B ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉฐ, B ๋ฉ์๋๋ B ๋ฉ์๋์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก C ๋ฉ์๋๋ฅผ ํธ์ถํ๋๋ก ๊ตฌํ์ด ๋์ด์๋ค๊ณ ํด๋ณด์. ์ด ๋ ๋ง์ฝ A ๋ฉ์๋์ ๋์์ด ์ผ๋ถ ์์ ๋๋ค๊ณ ํ ๋, B ์ C ๋ฉ์๋๋ฅผ ์ ๋ถ ๋ฐ๊ฟ์ผ ํ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค. ์ ์ง๋ณด์๊ฐ ๋งค์ฐ ๋นํจ์จ์ ์ธ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ค์ ๋ชจ๋ ๋ถ๋ฆฌํ ํ์๊ฐ ์๋ค.
OCP (Open-Closed) ๊ฐ๋ฐฉ-ํ์ ์์น
- ํ์ฅ์๋ ์ด๋ ค์์ด์ผ ํ๊ณ , ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํจ
- ์ฆ, ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๊ธฐ๋ฅ์ ์์ ํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์๋๋ก ์ค๊ณํด์ผ ํจ
- ์ด๋ฅผ ์งํค์ง ์์ผ๋ฉด instanceof ์ ๊ฐ์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ๋ค์ด ์บ์คํ ๋ฐ์
์ด๋ค ๋ชจ๋์ ๊ธฐ๋ฅ์ ํ๋ ์์ ํ ๋, ๊ทธ ๋ชจ๋์ ์ด์ฉํ๋ ๋ค๋ฅธ ๋ชจ๋๋ค ์ญ์ ์ค์ค์ด ๊ณ ์ณ์ผ ํ๋ค๋ฉด ์ ์ง๋ณด์๊ฐ ๋ณต์กํ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐฉ ํ์ ์์น์ ์ ์ ์ฉํ์ฌ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์์๋ ๊ธฐ๋ฅ์ ์๋กญ๊ฒ ๋ง๋ค๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์๋๋ก ํด์ผ ํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ธ ์ ์ฐ์ฑ, ์ฌ์ฌ์ฉ์ฑ, ์ ์ง๋ณด์์ฑ ๋ฑ์ ๋ชจ๋ ์์ด๋ฒ๋ฆฌ๋ ์ ์ด๊ณ , OOP๋ฅผ ์ฌ์ฉํ๋ ์๋ฏธ๊ฐ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
OCP ๋ ์ถ์ํ (์ธํฐํ์ด์ค) ์ ์์ (๋คํ์ฑ) ๋ฑ์ ํตํด ๊ตฌํํด๋ผ ์ ์๋ค. ์์ฃผ ๋ณํํ๋ ๋ถ๋ถ์ ์ถ์ํํจ์ผ๋ก์จ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๋ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๋๋ก ํจ์ผ๋ก์จ ์ ์ฐํจ์ ๋์ด๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
LSP (Liskov Substitution) ๋ฆฌ์ค์ฝํ ์นํ ์์น
- ํ์ ํ์
๊ฐ์ฒด๋ ์์ ํ์
๊ฐ์ฒด์์ ๊ฐ๋ฅํ ํ์๋ฅผ ์ํํ ์ ์์ด์ผ ํจ
→ ์ฆ, ์์ ํ์ ๊ฐ์ฒด๋ฅผ ํ์ ํ์ ๊ฐ์ฒด๋ก ์นํํด๋ ์ ์์ ์ผ๋ก ๋์ํด์ผ ํจ - ์์๊ด๊ณ์์๋ ๊ผญ ์ผ๋ฐํ ๊ด๊ณ (IS-A) ๊ฐ ์ฑ๋ฆฝํด์ผ ํ๋ค๋ ์๋ฏธ (์ผ๊ด์ฑ ์๋ ๊ด๊ณ์ธ์ง)
- ์์๊ด๊ณ๊ฐ ์๋ ํด๋์ค๋ค์ ์์๊ด๊ณ๋ก ์ค์ ํ๋ฉด, ์ด ์์น์ด ์๋ฐฐ๋จ (์ฌ์ฌ์ฉ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ)
๊ฒฐ๊ตญ์, ๋ฆฌ์ค์ฝํ ์นํ ์์น์ ์งํค์ง ์์ผ๋ฉด ๊ฐ๋ฐฉ ํ์ ์์น์ ์๋ฐํ๊ฒ ๋๋ ๊ฒ์ด๋ค. ๊ธฐ๋ฅ ํ์ฅ์ ์ํด ๊ธฐ์กด์ ์ฝ๋๋ฅผ ์ฌ๋ฌ ๋ฒ ์์ ํด์ผ ํ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์์ ๊ด๊ณ๋ฅผ ์ ์ ์ํ์ฌ LSP ์์น์ด ์๋ฐฐ๋์ง ์๋๋ก ์ค๊ณํด์ผ ํ๋ค.
ISP (Interface Segregation) ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
- ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ๋ ๋ฉ์๋์๋ง ์์กดํด์ผ ํ๋ค๋ ์์น
- ํ ํด๋์ค๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค๋ ๊ตฌํํ์ง ์์์ผ ํจ
→ ํ๋์ ํต์์ ์ธ ์ธํฐํ์ด์ค๋ณด๋ค๋ ์ฐจ๋ผ๋ฆฌ ์ฌ๋ฌ ๊ฐ์ ์ธ๋ถ์ ์ธ (๊ตฌ์ฒด์ ์ธ) ์ธํฐํ์ด์ค๊ฐ ๋์ - ์ธํฐํ์ด์ค๋ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์๊ฒ ๋ถ๋ฆฌ๋์ด์ผ ํจ
๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ํ์๋ก ํ๋ ์ธํฐํ์ด์ค๋ค์ ๋ถ๋ฆฌํจ์ผ๋ก์จ, ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋๋ผ๋ ์ํฅ์ ๋ฐ์ง ์๋๋ก ๋ง๋ค์ด์ผ ํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
DIP (Dependency Inversion) ์์กด ์ญ์ ์์น
- ์์กด ๊ด๊ณ๋ฅผ ๋งบ์ ๋, ๋ณํ๊ธฐ ์ฌ์ด ๊ฒ (๊ตฌ์ฒด์ ์ธ ๊ฒ) ๋ณด๋ค๋ ๋ณํ๊ธฐ ์ด๋ ค์ด ๊ฒ (์ถ์์ ์ธ ๊ฒ)์ ์์กดํด์ผ ํจ→ ๊ตฌ์ฒดํ๋ ํด๋์ค์ ์์กดํ๊ธฐ ๋ณด๋ค๋ ์ถ์ ํด๋์ค๋ ์ธํฐํ์ด์ค์ ์์กดํด์ผ ํ๋ค๋ ๋ป
- ์ฆ, ๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ๊ตฌํ์ ์์กดํด์๋ ์ ๋จ
- ์ ์์ค ๋ชจ๋์ด ๊ณ ์์ค ๋ชจ๋์์ ์ ์ํ ์ถ์ ํ์ ์ ์์กดํด์ผ ํจ
- ์ ์์ค ๋ชจ๋์ด ๋ณ๊ฒฝ๋์ด๋ ๊ณ ์์ค ๋ชจ๋์ ๋ณ๊ฒฝ์ด ํ์์๋ ํํ๊ฐ ์ด์์
์ด ์ ๋ฆฌ
SRP ์ ISP ๋ ๊ฐ์ฒด๊ฐ ์ปค์ง๋ ๊ฒ์ ๋ง์์ค๋ค. ๊ฐ์ฒด๊ฐ ๋จ์ผ ์ฑ ์์ ๊ฐ๋๋ก ํ๊ณ ํด๋ผ์ด์ธํธ๋ง๋ค ํนํ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ฒ ํจ์ผ๋ก์จ ํ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ๊ณณ๊น์ง ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๊ณ , ์ด๋ ๊ธฐ๋ฅ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ์ ์ฉ์ดํ๋๋ก ๋ง๋ค์ด ์ค๋ค.
LSP ์ DIP ๋ OCP ๋ฅผ ์ํฌํธํ๋ค. OCP ๋ ์์ฃผ ๋ณํ๋๋ ๋ถ๋ถ์ ์ถ์ํํ๊ณ ๋คํ์ฑ์ ์ด์ฉํจ์ผ๋ก์จ ๊ธฐ๋ฅ ํ์ฅ์๋ ์ฉ์ดํ๋ ๊ธฐ์กด ์ฝ๋์ ๋ณํ์๋ ๋ณด์์ ์ด๋๋ก ๋ง๋ค์ด ์ค๋ค. ์ฌ๊ธฐ์ '๋ณํ๋๋ ๋ถ๋ถ์ ์ถ์ํ'ํ ์ ์๋๋ก ๋์์ฃผ๋ ์์น์ด DIP ์ด๊ณ , ๋คํ์ฑ ๊ตฌํ์ ๋์์ฃผ๋ ์์น์ด LSP ์ธ ๊ฒ์ด๋ค.
'๐ Study > roadmap' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Backend- roadmap (0) | 2022.09.17 |
---|