๋ฐ์ํ
๊ฐ์ฒด ์งํฅ ํน์ง
- ์ถ์ํ
- ์บก์ํ
- ์์
- ๋คํ์ฑ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋ช ๋ น์ด ๋ชฉ๋ก์ผ๋ก ๋ณด๋ ์๊ฐ์์ ๋ฒ์ด๋ ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ๋ ๋จ์, ์ฆ "๊ฐ์ฒด"๋ค์ ๋ชจ์์ผ๋ก ํ์ ํ๊ณ ์ ํ๋ ๊ฒ. ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ (ํ๋ ฅ)
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋จ.
์ ์ฐํ๊ณ , ๋ณ๊ฒฝ์ด ์ฉ์ด ?
- ๋ ๊ณ ๋ธ๋ญ ์กฐ๋ฆฝํ๋ฏ์ด
- ํค๋ณด๋, ๋ง์ฐ์ค ๊ฐ์ ๋ผ์ฐ๋ฏ์ด
- ์ปดํจํฐ ๋ถํ ๊ฐ์ ๋ผ์ฐ๋ฏ์ด
- ์ปดํฌ๋ํธ๋ฅผ ์ฝ๊ณ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ๋ฉด์ ๊ฐ๋ฐํ ์ ์๋ ๋ฐฉ๋ฒ
๋คํ์ฑ
๋คํ์ฑ์ ์ค์ธ๊ณ ๋น์
- ์ค์ธ๊ณ์ ๊ฐ์ฒด ์งํฅ์ 1:1๋ก ๋งค์นญ X
- ๊ทธ๋๋ ์ค์ธ๊ณ์ ๋น์ ๋ก ์ดํดํ๊ธฐ์๋ ์ข์
- ์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ์ธ์์ ๊ตฌ๋ถ
์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ
- ์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ๊ตฌ๋ถํ๋ฉด ์ธ์์ด ๋จ์ํด์ง๊ณ , ์ ์ฐํด์ง๋ฉฐ ๋ณ๊ฒฝ๋ ํธ๋ฆฌํด์ง
- ์ฅ์
- ํด๋ผ์ด์ธํธ๋ ๋์์ ์ญํ (์ธํฐํ์ด์ค)๋ง ์๋ฉด๋จ
- ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๋จ
- ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ํฅ์ ๋ฐ์ง ์์
- ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์ ์์ฒด๋ฅผ ๋ณ๊ฒฝํด๋ ์ํฅ์ ๋ฐ์ง ์์
์๋ฐ ์ธ์ด
- ์๋ฐ ์ธ์ด์ ๋คํ์ฑ์ ํ์ฉ
- ์ญํ = ์ธํฐํ์ด์ค
- ๊ตฌํ = ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค, ๊ตฌํ ๊ฐ์ฒด
- ๊ฐ์ฒด๋ฅผ ์ค๊ณํ ๋ ์ญํ ๊ณผ ๊ตฌํ์ ๋ช ํํ ๋ถ๋ฆฌ
- ๊ฐ์ฒด ์ค๊ณ ์ ์ญํ (์ธํฐํ์ด์ค)๋ฅผ ๋จผ์ ๋ถ์ฌํ๊ณ , ๊ทธ ์ญํ ์ ์ํํ๋ ๊ตฌํ ๊ฐ์ฒด ๋ง๋ค๊ธฐ
๊ฐ์ฒด์ ํ๋ ฅ์ด๋ผ๋ ๊ด๊ณ๋ถํฐ ์๊ฐ
- ํผ์ ์๋ ๊ฐ์ฒด๋ ์์
- ํด๋ผ์ด์ธํธ : ์์ฒญ, ์๋ฒ : ์๋ต
- ์ ๋ง์ ๊ฐ์ฒด ํด๋ผ์ด์ธํธ์ ๊ฐ์ฒด ์๋ฒ๋ ์๋ก ํ๋ ฅ ๊ด๊ณ๋ฅผ ๊ฐ์ง
์๋ฐ ์ธ์ด์ ๋คํ์ฑ
- ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ ์ฌ๋ ค๋ณด์
- ์ค๋ฒ๋ผ์ด๋ฉ์ ์๋ฐ ๊ธฐ๋ณธ ๋ฌธ๋ฒ
- ์ค๋ฒ๋ผ์ด๋ฉ ๋ ๋ฉ์๋๊ฐ ์คํ
- ๋คํ์ฑ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ฅผ ์คํ ์์ ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์์
- ๋ฌผ๋ก ํด๋์ค ์์ ๊ด๊ณ๋ ๋คํ์ฑ, ์ค๋ฒ๋ผ์ด๋ฉ ์ ์ฉ ๊ฐ๋ฅ
๋คํ์ฑ์ ๋ณธ์ง
- ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด ์ธํฐํ์ด์ค๋ฅผ ์คํ ์์ ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์์
- ๋คํ์ฑ์ ๋ณธ์ง์ ์ดํดํ๋ ค๋ฉด ํ๋ ฅ์ด๋ผ๋ ๊ฐ์ฒด์ฌ์ด์ ๊ด๊ณ์์ ์์ํด์ผํจ
- ํด๋ผ์ด์ธํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ฒ์ ๊ตฌํ ๊ธฐ๋ฅ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์์
์ ๋ฆฌ
- ์ค์ธ๊ณ์ ์ญํ๊ณผ ๊ตฌํ์ด๋ผ๋ ํธ๋ฆฌํ ์ปจ์ ์ ๋คํ์ฑ์ ํตํด ๊ฐ์ฒด ์ธ์์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์
- ์ ์ฐํ๊ณ , ๋ณ๊ฒฝ์ด ์ฉ์ด
- ํ์ฅ ๊ฐ๋ฅํ ์ค๊ณ
- ํด๋ผ์ด์ธํธ์ ์ํฅ์ ์ฃผ์ง ์๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ์ธํฐํ์ด์ค๋ฅผ ์์ ์ ์ผ๋ก ์ ์ค๊ณํ๋ ๊ฒ์ด ์ค์
ํ๊ณ
- ์ญํ (์ธํฐํ์ด์ค) ์์ฒด๊ฐ ๋ณํ๋ฉด, ํด๋ผ์ด์ธํธ, ์๋ฒ ๋ชจ๋์ ํฐ ๋ณ๊ฒฝ์ด ๋ฐ์
- ์๋์ฐจ๋ฅผ ๋นํ๊ธฐ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด ?
- ๋๋ณธ ์์ฒด๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด ?
- USB ์ธํฐํ์ด์ค๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด ?
- ์ธํฐํ์ด์ค๋ฅผ ์์ ์ ์ผ๋ก ์ ์ค๊ณํ๋ ๊ฒ์ด ์ค์
์คํ๋ง๊ณผ ๊ฐ์ฒด ์งํฅ
- ๋คํ์ฑ์ด ๊ฐ์ฅ ์ค์ !
- ์คํ๋ง์ ๋คํ์ฑ์ ๊ทน๋ํํด์ ์ด์ฉํ ์ ์๊ฒ ๋์์ค
- ์คํ๋ง์์ ์ด์ผ๊ธฐํ๋ ์ ์ด์ ์ญ์ (IoC), ์์กด๊ด๊ณ ์ฃผ์ (DI)์ ๋คํ์ฑ์ ํ์ฉํด์ ์ญํ ๊ณผ ๊ตฌํ์ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ์ง์
- ์คํ๋ง์ ์ฌ์ฉํ๋ฉด ๋ง์น ๋ ๊ณ ๋ธ๋ญ ์กฐ๋ฆฝํ๋ฏ์ด ! ๊ณต์ฐ ๋ฌด๋์ ๋ฐฐ์ฐ๋ฅผ ์ ํํ๋ฏ์ด ! ๊ตฌํ์ ํธ๋ฆฌํ๊ฒ ๋ณ๊ฒฝํ ์ ์์ !
์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น (SOLID)
SOLID
ํด๋ฆฐ์ฝ๋๋ก ์ ๋ช ํ ๋ก๋ฒํธ ๋งํด์ด ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น์ ์ ๋ฆฌ
- SRP : ๋จ์ผ ์ฑ ์ ์์น (Single Reponsibility Principle)
- OCP : ๊ฐ๋ฐฉ-ํ์ ์์น (Open/Closed Principle)
- LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov Substitution Principle)
- ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface Segregation Principle)
- DIP : ์์กด๊ด๊ณ ์ญ์ ์์น (Dependency Inversion Principle)
SRP ๋จ์ผ ์ฑ ์ ์์น
- ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํจ
- ํ๋์ ์ฑ
์์ด๋ผ๋ ๊ฒ์ ๋ชจํธํจ
- ํด ์ ์๊ณ , ์์ ์ ์์
- ๋ฌธ๋งฅ๊ณผ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฆ
- ์ค์ํ ๊ธฐ์ค์ ๋ณ๊ฒฝ. ๋ณ๊ฒฝ์ด ์์ ๋ ํ๊ธ ํจ๊ณผ๊ฐ ์ ์ผ๋ฉด ๋จ์ผ ์ฑ ์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ
- ์) UI ๋ณ๊ฒฝ, ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ฌ์ฉ์ ๋ถ๋ฆฌ
OCP ๊ฐ๋ฐฉ-ํ์ ์์น
- ์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํจ
- ์ด๋ฐ ๊ฑฐ์ง๋ง ๊ฐ์ ๋ง์ด ? ํ์ฅ์ ํ๋ ค๋ฉด, ๋น์ฐํ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝ ?
- ๋คํ์ฑ์ ํ์ฉํด๋ณด์
- ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์๋ก์ด ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค์ด์ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ตฌํ
- ์ง๊ธ๊น์ง ๋ฐฐ์ด ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ๋ฅผ ์๊ฐํด๋ณด์
๋ฌธ์ ์
- MemberService ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌํ ํด๋์ค๋ฅผ ์ง์ ์ ํ
MemberRepository m = new MemoryMemberRepository();
// ๊ธฐ์กด ์ฝ๋MemberRepository m = new JdbcMemberRepository();
// ๋ณ๊ฒฝ ์ฝ๋
- ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํจ
- ๋ถ๋ช ๋คํ์ฑ์ ์ฌ์ฉํ์ง๋ง OCP ์์น์ ์งํฌ ์ ์์
- ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ๋ ?
- ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ๋ณ๋์ ์กฐ๋ฆฝ, ์ค์ ์๊ฐ ํ์ํจ
LSP ๋ฆฌ์ค์ฝํ ์นํ ์์น
- ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํจ
- ๋คํ์ฑ์์ ํ์ ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ท์ฝ์ ๋ค ์ง์ผ์ผ ํ๋ค๋ ๊ฒ, ๋คํ์ฑ์ ์ง์ํ๊ธฐ ์ํ ์์น, ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ ๋ฏฟ๊ณ ์ฌ์ฉํ๋ ค๋ฉด, ์ด ์์น์ด ํ์ํจ
- ๋จ์ํ ์ปดํ์ผ์ ์ฑ๊ณตํ๋ ๊ฒ์ ๋์ด์๋ ์ด์ผ๊ธฐ
- ์ ) ์๋์ฐจ ์ธํฐํ์ด์ค์ ์์ ์ ์์ผ๋ก ๊ฐ๋ผ๋ ๊ธฐ๋ฅ, ๋ค๋ก ๊ฐ๊ฒ ๊ตฌํํ๋ฉด LSP ์๋ฐ, ๋๋ฆฌ๋๋ผ๋ ์์ผ๋ก ๊ฐ์ผํจ
ISP ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
- ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๋์
- ์๋์ฐจ ์ธํฐํ์ด์ค โ ์ด์ ์ธํฐํ์ด์ค, ์ ๋น ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌ
- ์ฌ์ฉ์ ํด๋ผ์ด์ธํธ โ ์ด์ ์ ํด๋ผ์ด์ธํธ, ์ ๋น์ฌ ํด๋ผ์ด์ธํธ๋ก ๋ถ๋ฆฌ
- ๋ถ๋ฆฌํ๋ฉด ์ ๋น ์ธํฐํ์ด์ค ์์ฒด๊ฐ ๋ณํด๋ ์ด์ ์ ํด๋ผ์ด์ธํธ์ ์ํฅ์ ์ฃผ์ง ์์
- ์ธํฐํ์ด์ค๊ฐ ๋ช ํํด์ง๊ณ , ๋์ฒด ๊ฐ๋ฅ์ฑ์ด ๋์์ง
DIP ์์กด๊ด๊ณ ์ญ์ ์์น
- ํ๋ก๊ทธ๋๋จธ๋ "์ถ์ํ์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค." ์์กด์ฑ ์ฃผ์ ์ ์ด ์์น์ ๋ฐ๋ฅด๋ ๋ฐฉ๋ฒ ์ค ํ๋
- ์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ๊ตฌํ ํด๋์ค์ ์์กดํ์ง ๋ง๊ณ , ์ธํฐํ์ด์ค์ ์์กดํ๋ผ๋ ๋ป
- ์์์ ์ด์ผ๊ธฐํ ์ญํ (Role)์ ์์กดํ๊ฒ ํด์ผ ํ๋ค๋ ๊ฒ๊ณผ ๊ฐ์. ๊ฐ์ฒด ์ธ์๋ ํด๋ผ์ด์ธํธ๊ฐ ์ธํฐํ์ด์ค์ ์์กดํด์ผ ์ ์ฐํ๊ฒ ๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ ! ๊ตฌํ์ฒด์ ์์กดํ๊ฒ ๋๋ฉด ๋ณ๊ฒฝ์ด ์์ฃผ ์ด๋ ค์์ง
- ๊ทธ๋ฐ๋ฐ OCP์์ ์ค๋ช ํ MemberService๋ ์ธํฐํ์ด์ค์ ์์กดํ์ง๋ง, ๊ตฌํ ํด๋์ค๋ ๋์์ ์์กดํจ
- MemberService ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌํ ํด๋์ค๋ฅผ ์ง์ ์ ํ
MemberRepository m = new MemoryMemberRepository();
- DIP ์๋ฐ
์ ๋ฆฌ
- ๊ฐ์ฒด ์งํฅ์ ํต์ฌ์ ๋คํ์ฑ
- ๋คํ์ฑ ๋ง์ผ๋ก๋ ์ฝ๊ฒ ๋ถํ์ ๊ฐ์ ๋ผ์ฐ๋ฏ์ด ๊ฐ๋ฐํ ์ ์์
- ๋คํ์ฑ ๋ง์ผ๋ก๋ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ ํจ๊ป ๋ณ๊ฒฝ๋จ
- ๋คํ์ฑ ๋ง์ผ๋ก๋ OCP, DIP๋ฅผ ์งํฌ ์ ์์
- ๋ญ๊ฐ ๋ ํ์ํด........ !!!
๋ค์ ์คํ๋ง์ผ๋ก !
์คํ๋ง ์ด์ผ๊ธฐ์ ์ ๊ฐ์ฒด ์งํฅ ์ด์ผ๊ธฐ๊ฐ ๋์ค๋๊ฐ ?
- ์คํ๋ง์ ๋ค์ ๊ธฐ์ ๋ก ๋คํ์ฑ + OCP, DIP๋ฅผ ๊ฐ๋ฅํ๊ฒ ์ง์
- DI(Dependency Injection) : ์์กด๊ด๊ณ, ์์กด์ฑ ์ฃผ์
- DI ์ปจํ ์ด๋ ์ ๊ณต
- ํด๋ผ์ด์ธํธ ์ฝ๋์ ๋ณ๊ฒฝ์์ด ๊ธฐ๋ฅ ํ์ฅ
- ์ฝ๊ฒ ๋ถํ์ ๊ต์ฒดํ๋ฏ์ด ๊ฐ๋ฐ
728x90
๋ฐ์ํ
'์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์กด์ฑ ์ฃผ์ ( DI ) (0) | 2022.09.01 |
---|---|
์ ์ด์ ์ญ์ ( IoC ) (0) | 2022.09.01 |
์คํ๋ง์ด๋ ? (0) | 2022.08.31 |
[ Spring Boot ] API (0) | 2022.08.30 |
[ Spring Boot ] ๋ฐ์ดํฐ ๋ฒ ์ด์ค (0) | 2022.08.30 |