SOLID
ํด๋ฆฐ ์ฝ๋๋ก ์ ๋ช ํ ๋ก๋ฒํธ ๋งํด์ด ์ ๋ฆฝํ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ 5๊ฐ์ง ํต์ฌ ์์น์ผ๋ก, ์ ์ง๋ณด์์ ํ์ฅ์ด ์ฌ์ด ์ํํธ์จ์ด๋ฅผ ๋ง๋๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
SRP: ๋จ์ผ ์ฑ
์ ์์น(Single Responsibility Principle)
ํด๋์ค๋ ๋จ ํ ๊ฐ์ง์ ๋ณ๊ฒฝ ์ด์ ๋ก ๋ณ๊ฒฝ์ด ๋์ด์ผ ํ๋ฉฐ, ์ฑ ์์ด ํ๋์ฌ์ผ ํ๋ค.
ํต์ฌ ์ ๋ฌด ๊ท์น(๊ธฐํํ ์์ฒญ)๊ณผ ๊ธฐ์ ์ ์ธ ์ฒ๋ฆฌ ๋ฐฉ์(DB, ์ด๋ฉ์ผ ๋ฑ ์ธํ๋ผ ๋ด๋น)์ด ๊ฐ์ ํด๋์ค ๋ด์ ์๋ค๋ฉด ์ด๋ SRP ์๋ฐ
ํด๋น ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ์ด์ ๊ฐ ์ค์ง ํ๋์ผ ๋, ๋จ์ผ ์ฑ ์ ์์น์ ์ ์งํจ ๊ฒ
๊ด๋ จ๋ ๊ธฐ๋ฅ์ด ๋ชจ์ฌ ์์ด ์์ ๋ฒ์๊ฐ ๋ช ํํด์ง๋ฉฐ, ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ๋ ๋ฆฝ์ ์ธ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํด์ง๋ค.
OCP: ๊ฐ๋ฐฉ-ํ์ ์์น(Open-Closed principle)
๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ ์ ์ฐํ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๊ฒ์ผ๋ก, ์ถ์ํ์ ๋คํ์ฑ์ ํ์ฉํ๋ค.
ํ์ฅ์ ์ด๋ ค ์๋ค: ์๋ก์ด ์๊ตฌ์ฌํญ์ด ์์ ๋ ์๋ก์ด ํด๋์ค๋ฅผ ์ถ๊ฐํ์ฌ ๊ธฐ๋ฅ ํ์ฅ
๋ณ๊ฒฝ์ ๋ซํ ์๋ค: ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ์ง ์์
๊ธฐ์กด ์ฝ๋๋ฅผ ๊ฑด๋๋ฆฌ์ง ์์ผ๋ฏ๋ก ํ๊ท ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์์ง๋ค.
LSP: ๋ฆฌ์ค์ฝํ ์นํ ์์น(Liskov Substitution Principle)
์๋ธ ํ์ ์ ์ธ์ ๋ ์์ ์ ๊ธฐ๋ฐ ํ์ (Super Type)์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ค.
์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ์์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ํ์ ํด๋์ค๋ก ๋์ฒด ๊ฐ๋ฅํด์ผ ํจ
์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๊ท์ฝ ์๋ฐ ๊ธ์ง
๋ชจ๋ ๊ฒฐ์ ์๋จ์ด ํ๋ถ ๊ฐ๋ฅํ ๊ฒ์ด๋ผ ๊ฐ์ ํ๊ณ ์ธํฐํ์ด์ค๋ฅผ ์ค๊ณํ์ผ๋, ์ด๋ฒคํธ ๋ฌด๋ฃ ํฌ์ธํธ๋ ํ๋ถ์ด ๋ถ๊ฐ๋ฅํ ์ ์ฝ์ด ์๋ค๋ฉด LSP๋ฅผ ์๋ฐํ๊ฒ ๋๋ค.
ํ์ ํ์ ์ด ์์ ํ์ ์ ๊ท์ฝ์ ์ค์ํ๋ฏ๋ก ์ฝ๋ ๋ณ๊ฒฝ ์ ์๊ธฐ์น ์์ ๋ถ์์ฉ ๊ฐ์ํ๊ฒ ๋๋ค.
ISP: ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น(Interface segregation principle)
์ฌ๋ฌ ๊ธฐ๋ฅ์ ํฌํจํ ๋ฒ์ฉ ์ธํฐํ์ด์ค ๋ณด๋จ ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
์ธํฐํ์ด์ค๊ฐ ๋น๋ํด์ง๋ฉด, ์ด๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ ํ์ ์๋ ๊ธฐ๋ฅ๊น์ง ๋ถํ์ํ๊ฒ ๊ตฌํ ํ์
์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฅ๋ณ๋ก ์ชผ๊ฐ๋ฉด ํด๋ผ์ด์ธํธ๋ ๊ผญ ํ์ํ ๊ธฐ๋ฅ๋ง ์๋ฉด ๋๋ฏ๋ก ๊ฒฐํฉ๋ ๋ฎ์์ง
๋ถํ์ํ ์์กด์ฑ ์ ๊ฑฐํ๊ฒ ๋์ด ์ธํฐํ์ด์ค๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ฌ์ฉํ์ง ์๋ ํด๋ผ์ด์ธํธ์๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
DIP: ์์กด ์ญ์ ์์น(Dependency inversion principle)
๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ์์กดํด์๋ ์ ๋๋ฉฐ, ๋ ๋ค ์ถ์ํ์ ์์กดํ์ฌ ์์กด ๋ฐฉํฅ์ ์ญ์ ์์ผ์ผ ํ๋ค.
๊ณ ์์ค ๋ชจ๋(๋น์ฆ๋์ค ๋ก์ง)์ด ์ ์์ค ๋ชจ๋(์ธ๋ถ ๊ตฌํ ํด๋์ค)์ ์ง์ ์ฐธ์กฐํ๋ฉด ๊ฒฐํฉ๋๊ฐ ๋์์ง
์ค๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๋์ด, ์ ์์ค ๋ชจ๋์ด ์ธํฐํ์ด์ค์ ์์กดํ๊ฒ ๋ง๋ฆ์ผ๋ก์จ ์์กด ๋ฐฉํฅ ์ญ์
๊ตฌํ์ฒด๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๊ณ ์์ค ๋ชจ๋์ ์ํฅ์ ๋ฐ์ง ์๊ฒ๋์ด ์ ์ฐํ ๊ต์ฒด๊ฐ ๊ฐ๋ฅํด์ง๋ค.
SOLID ์์น ํต์ฌ ์์ฝ
SRP(๋จ์ผ ์ฑ ์ ์์น)
์ฑ ์์ ๋ถ๋ฆฌ
์์ง๋๋ ๋์ด๊ณ ๊ฒฐํฉ๋๋ ๋ฎ์ถ์ด ์์ ๋ฒ์๋ฅผ ๋ช ํํ๊ฒ ํจ
OCP(๊ฐ๋ฐฉ-ํ์ ์์น)
์ ์ฐํ ํ์ฅ
๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๊ธฐ๋ฅ์ ํ์ฅํ์ฌ ํ๊ท ๋ฒ๊ทธ ๋ฐฉ์ง
LSP(๋ฆฌ์ค์ฝํ ์นํ ์์น)
๊ท์ฝ ์ค์
ํ์ ํ์ ์ด ์์ ๊ท์ฝ์ ์๋ฒฝํ ์ค์ํ์ฌ ๋คํ์ฑ์ ์์ ์ฑ ๋ณด์ฅ
ISP(์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น)
์ธํฐํ์ด์ค ์ต์ ํ
๋ถํ์ํ ์์กด์ฑ์ ์ ๊ฑฐํ์ฌ ์ธํฐํ์ด์ค ๋ณ๊ฒฝ ์ ์ํฅ ์ต์ํ
DIP(์์กด ์ญ์ ์์น)
์์กด์ฑ ์ฃผ์
๊ตฌํ์ฒด๊ฐ ์๋ ์ถ์ํ์ ์์กดํ์ฌ ๋ถํ ๊ต์ฒดํ๋ฏ ์ ์ฐํ ๋ณ๊ฒฝ ๊ฐ๋ฅ
Last updated