SOLID
๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ์ํ 5์์น์ผ๋ก SOLID๊ฐ ์๊ฐ๋จ
โ ๋์ ์์ง๋, ๋ฎ์ ๊ฒฐํฉ๋๋ผ๋ ๊ณ ์ ์ ์ธ ๊ฐ๋ฐ์์น์ ๊ฐ์ฒด์งํฅ์ ์ธ ๊ด์ ์์ ๋ค์ ์ ๋ฆฝํ ๊ฒ์ด SOLID ์์น
SRP single responsibility - ๋จ์ผ ์ฑ ์ ์์น
์ด๋ค ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผํ๋ ์ด์ ๋ ์ค์ง ํ๋ ๋ฟ์ด์ด์ผ ํ๋ค
์ญํ (์ฑ ์)์ ๋ถ๋ฆฌํ๋ค
๊ฐ์ฒด์งํฅ 4๋ ํน์ฑ ์ค ํ๋์ธ ์ถ์ํ(๋ชจ๋ธ๋ง ๊ณผ์ )์ ํตํด ํด๋์ค ์ ๋ณ, ์์ฑ, ๋ฉ์๋ ์ค๊ณ ์์ ๋ฐ๋์ SRP๋ฅผ ๊ณ ๋ คํ๋ ์ต๊ด์ ๋ค์ด์
OCP open closed- ๊ฐ๋ฐฉ ํ์ ์์น
์์ ์ ํ์ฅ์๋ ์ด๋ ค์๊ณ , ์ฃผ๋ณ์ ๋ณํ์ ๋ํด์๋ ๋ซํ ์์ด์ผ ํ๋ค.
์์ ํด๋์ค, ์ธํฐํ์ด์ค๋ฅผ ์ค๊ฐ์ ๋์ด์ ๋ณํ์ ๋ซํ์์ด์ผ ํ๋ค
LSP Liskov substitution - ๋ฆฌ์ค์ฝํ ์นํ ์์น
์๋ธ ํ์ ์ ์ธ์ ๋ ์์ ์ ๊ธฐ๋ฐ ํ์ ์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ๋๋ค(Robert C. martin)
ํ์ ํด๋์ค is a kind of ์์ ํด๋์ค, ๊ตฌํ ํด๋์ค is able to ์ธํฐํ์ด์ค โ ์ด ๋ฌธ์ฅ๋๋ก ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ด๋ฉด LSP๋ฅผ ์ ์งํค๊ณ ์๋ ๊ฒ
์์ธ: ์์์ด ์กฐ์ง๋๋ ๊ณ์ธต๋ ํํ๋ก ๊ตฌํ๋ ๊ฒฝ์ฐ
ํ์ ํด๋์ค์ ์ธ์คํด์ค๋ ์์ํ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์์ ๋์ ํด ์์ ํด๋์ค์ ์ธ์คํด์ค ์ญํ ์ ํ๋๋ฐ ๋ฌธ์ ๊ฐ ์์ด์ผ ํ๋ค
ISP interface segregation- ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
ํด๋ผ์ด์ดํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กด๊ด๊ณ๋ฅผ ๋งบ์ผ๋ฉด ์๋๋ค
SRP์ ISP๋ ๊ฐ์ ๋ฌธ์ ์ ๋ํ ๋๊ฐ์ง ๋ค๋ฅธ ํด๊ฒฐ์ฑ . ํ์ง๋ง SRP๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ ํด๊ฒฐ์ฑ ์ด๋ค.
์ธํฐํ์ด์ค ์ต์์ฃผ์ ์์น: ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ฉ์๋๋ฅผ ์ธ๋ถ์ ๊ณต๊ฐํ ๋๋ ์ต์ํ์ ๋ฉ์๋๋ง ์ ๊ณตํด์ผ ํ๋ค.
โ LSP์ ๋ฐ๋ฅด๋ฉด ์์ํด๋์ค์ ๊ธฐ๋ฅ์ ๋ง์์๋ก ์ข๋ค. ISP์ ๋ฐ๋ฅด๋ฉด ์ธํฐํ์ด์ค์ ๊ธฐ๋ฅ์ ์์ ์๋ก ์ข๋ค.
์์ ํด๋์ค์ ๊ธฐ๋ฅ์ด ๋น์ฝํ๋ฉด ํ๋ณํ์ด ์์ฃผ ์ผ์ด๋์ ์์์ ํํ์ ๋ณผ ์ ์๋ค.
์ธํฐํ์ด์ค ๊ธฐ๋ฅ์ด ์์์ผ ๊ฐ ๊ธฐ๋ฅ๋ณ๋ก ๋ถ๋ฆฌํด์ ์ฌ์ฉํ ์ ์๋ค.
DIP dependency inversion - ์์กด ์ญ์ ์์น
์์ ๋ณด๋ค ๋ณํ๊ธฐ ์ฌ์ด ๊ฒ์ ์์กดํ์ง ๋ง๋ผ
๊ณ ์ฐจ์ ๋ชจ๋์ ์ ์ฐจ์ ๋ชจ๋์ ์์กดํ๋ฉด ์๋๋ค. ์ด ๋ ๋ชจ๋ ๋ชจ๋ ๋ค๋ฅธ ์ถ์ํ ๋ ๊ฒ์ ์์กดํด์ผ ํ๋ค
์ถ์ํ๋ ๊ฒ์ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์์กดํ๋ฉด ์๋๋ค. ๊ตฌ์ฒด์ ์ธ ๊ฒ์ด ์ถ์ํ๋ ๊ฒ์ ์์กดํด์ผ ํ๋ค
์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ตฌ์ฒด(concrete) ํด๋์ค์ ์์กดํ์ง ๋ง๋ผ
SoC(separation of concerns): ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ. ๊ด์ฌ์ด ๊ฐ์ ๊ฒ ๋ผ๋ฆฌ๋ ํ๋์ ๊ฐ์ฒด ํน์ ์นํ ๊ฐ์ฒด๋ก ๋ชจ์ฐ๊ณ , ๊ด์ฌ์ด ๋ค๋ฅธ ๊ฒ์ ์๋ก ๋จ์ด์ ธ ์ํฅ์ ์ฃผ์ง ์๋๋ก ๋ถ๋ฆฌํ๋ ์์น.
SoC๋ฅผ ์ ์ฉํ๋ฉด ์์ฐ์ค๋ฝ๊ฒ SOLID ์์น์ ์ ์ฉํ๊ฒ ๋๋ค.
Last updated