์คํ๋ง ํ๋ ์์ํฌ
์คํ๋ง ๋ถํธ
์คํ๋ง์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํด ์ฃผ๋ ๊ฒ
์คํ๋ง์ ์ ๋ง๋ค์๋์?
(ํต์ฌ ๊ฐ๋ )
์คํ๋ง์ ์๋ฐ ์ธ์ด ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ
๊ฐ์ฒด ์งํฅ ์ธ์ด
์คํ๋ง์ ๊ฐ์ฒด ์งํฅ ์ธ์ด๊ฐ ๊ฐ์ง ๊ฐ๋ ฅํ ํน์ง์ ์ด๋ ค๋ด๋ ํ๋ ์์ํฌ
์คํ๋ง์ ์ข์ ๊ฐ์ฒด ์งํฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๊ฒ ๋์์ฃผ๋ ํ๋ ์์ํฌ
์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ดํดํ๋ ค๋ฉด
" ์ข์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ๋ญ๊น?? "๋ฅผ ์์์ผ ํ๋ค.
๊ฐ์ฒด ์งํฅ ํน์ง
- ์ถ์ํ
์ถ์ํ๋ ์ค์ ์ธ์์ ๊ฐ์ฒดํํ๋ ๊ฒ ์๋๋ผ ํ์ํ ์ ๋ณด๋ง์ ์ค์ฌ์ผ๋ก ๊ฐ์ํํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ค์ ์งํ๋๋ณด๋ค ์งํ์ฒ ์ญ ๊ฐ์ ์๋์์น๊ฐ ์ค์ํ๊ฒ ์ ๋ฆฌ๋ ์งํ์ฒ ๋ ธ์ ๋๊ฐ ์ถ์ํ์ ๋ํ์ ์ธ ์์ด๋ค.
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ๊ฐ์ฒด๋ค์ ๊ณตํต์ ์ธ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์ค์ฌ์ผ๋ก ์ถ์ํํ๋ค.
- ์บก์ํ
์ถ์ํ๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์ ์ํ๋ค๋ฉด, ๊ฐ์ฒด์ ํ์ํ ๋ฐ์ดํฐ๋ ๊ธฐ๋ฅ(๋ฉ์๋)์ ์ฑ ์์ด ์๋ ๊ฐ์ฒด์ ๊ทธ๋ฃนํ์์ผ ์ฃผ๋ ๊ฒ์ ์บก์ํ(Capsulation)์ด๋ผ ํ๋ค.
๊ด๋ จ๋ ์ ๋ณด์ ๊ธฐ๋ฅ๋ง ๋ชจ์๋ ํด๋์ค. ์บก์ํ์ ์์ด๋ค.
- ์์
์์ ํด๋์ค์ ๊ธฐ๋ฅ์ ํ์ ํด๋์ค๊ฐ ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ ์ด๋ค.
์์์ด ํ์ํ ์ด์ ๋ ์ฌ๋ฌ ๊ฐ์ฒด์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ ํ๋์ ํด๋์ค๋ก ๋ถ๋ฆฌํด์ ์ฌ์ฉํ ์ ์๋๋ก ์ํจ์ด๋ค.
์ฆ ์ค๋ณต๋๋ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ์ํจ์ด๋ค.
์ค๋ณต๋๋ ๊ธฐ๋ฅ์ด๋ ๋ฐ์ดํฐ๋ ์์ ํด๋์ค๋ก ๋ถ๋ฆฌํ์ฌ ์์์ ์ด์ฉํ๋ฉด ์ฌ์ฌ์ฉํ ์ ์๋ค.
- ๋คํ์ฑ
์์ ํน์ง๋ค์ ์ข ํฉํ๋, ๊ฐ์ฅ ์ค์ํ ํน์ง.
๊ฐ์ฒด์งํฅ์ ๊ฐ์ฒด ๊ฐ ๊ด๊ณ๋ฅผ ๋์์ธํ๋ ํ๋ก๊ทธ๋๋ฐ์ธ๋ฐ, ๋คํ์ฑ์ ์ด ๊ฐ์ฒด๊ฐ ๊ด๊ณ๋ฅผ ์ ์ฐํ๊ฒ ํด์ฃผ๋ ํน์ง์ด๋ค.
์ฌ๋์ ์์์ ๋จน๋๋ค ๋ผ๋ ๋ช ์ ์์ ์์์ ์นํจ์ด ๋ ์๋ ์๊ณ , ๋ผ๋ฉด์ด ๋ ์๋ ์๋ค. ์ด๋์์์ ์ด๋ฐ ํน์ง์ ๋คํ์ฑ์ด๋ผ๊ณ ํ๋ค. ์ธํฐํ์ด์ค๊ฐ ์ด๋ฐ ๋คํ์ฑ์ ๊ตฌํํ ์ ์๋๋ก ๋๋ ๋ํ์ ์ธ ๊ฐ๋ ์ด๋ค.
- ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ๋ ๋จ์, ๊ฐ์ฒด๋ค์ ๋ชจ์์ผ๋ก ํ์ ํ๊ธฐ
- ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.(ํ๋ ฅ)
- ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ ๋ค.
- ๋ ๊ณ ๋ธ๋ก ์กฐ๋ฆฝํ๋ฏ์ด
- ์ปดํจํฐ ๋ถํ ๊ฐ์ ๋ผ์ฐ๋ฏ์ด
- ์ปดํฌ๋ํธ๋ฅผ ์ฝ๊ณ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ๋ฉด์ ๊ฐ๋ฐํ ์ ์๋ ๋ฐฉ๋ฒ
๋คํ์ฑ(Polymorphism)
์ดํด๋ฅผ ์ฝ๊ฒ ํ๋๋ก ์ค์ธ๊ณ์ ๋น์ ํด๋ณด์
์ธ์์ ์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ์ธ์์ ๊ตฌ๋ถํ๋ค
( ์ญํ : ์ธํฐํ์ด์ค / ๊ตฌํ : ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด )
๋คํ์ฑ์ ์ค์ธ๊ณ ๋น์ ์์
์ด์ ์๊ฐ K3๋ฅผ ํ๋ค๊ฐ ์๋ฐ๋ผ๋ก ์ฐจ๋ฅผ ๋ฐ๊ฟจ๋ค.
์ด์ ์๋ ๊ณ์ ์ด์ ์ ํ ์ ์๋๊ฐ?
-> YES
์๋์ฐจ ์ญํ ์ ๋ํ ๊ตฌํ๋ง ๋ฐ๋์์ ๋ฟ(K3->์๋ฐ๋ผ)
์ด์ ์์๊ฒ ์ํฅ์ ์ฃผ์ง ์๋๋ค
์๋์ฐจ ์ญํ (์ธํฐํ์ด์ค)์ ๋ค ๋ฐ๋ผ์ ์๋์ฐจ๋ค(K3, ์๋ฐ๋ผ, ํ ์ฌ๋ผ)์ด ๊ตฌํ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค
์ด์ ์๋ ์๋์ฐจ ์ญํ (์ธํฐํ์ด์ค)์ ๋ํด์๋ง ์๊ณ ์๋ค(์์กดํ๊ณ ์๋ค)
์ด์ ์๋ ์๋์ฐจ์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๋๋ค.
๊ตฌํํ ์๋์ฐจ๋ค์ด ๋ด๋ถ์ ์ผ๋ก ๋ฐ๋๋๋ผ๋ ์๋์ฐจ ์ญํ ๋ง ๊ทธ๋๋ก ๋ง์ถฐ์ ํ๊ณ ์์ผ๋ฉด ์ด์ ์์๊ฒ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ๊ตฌ๋ถํ์ !
(ํด๋ผ์ด์ธํธ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด์ ์๋์ฐจ ์ธ์์ ๋ฌดํํ ํ์ฅ ๊ฐ๋ฅ )
๋ก๋ฏธ์ค, ์ค๋ฆฌ์ฃ ์ญํ ์ ๋์ฒด ๊ฐ๋ฅํด์ผ ํจ(๋ณ๊ฒฝ๊ฐ๋ฅ)
์ค๋ฆฌ์ฃ ๊ตฌํ์ด ๋ฐ๋๋ค ํ๋๋ผ๋(์ฅ๋๊ฑด์์ ์๋น์ผ๋ก ๋ฐ๋๋ค ํ๋๋ผ๋)
๋ก๋ฏธ์ค ์ญํ ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค(๊นํํฌ๊ฐ ํ๋ ์กํ๊ต๊ฐ ํ๋ )
๋ค๋ฅธ ๋์์ผ๋ก ๋์ฒด๊ฐ ๊ฐ๋ฅํ๋ค
๋ ๋ค๋ฅธ ์์๋ค
- ํค๋ณด๋, ๋ง์ฐ์ค, ์ธ์์ ํ์ค ์ธํฐํ์ด์ค๋ค
(์ปดํจํฐ์ ํค๋ณด๋๋ฅผ ๊ต์ฒดํด๋ ์ฌ์ฉ๊ฐ๋ฅ ํ๋ค)
- ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ํ ์ธ ์ ์ฑ ๋ก์ง
์๋ฐ ์ธ์ด์์์ ๋คํ์ฑ ํ์ฉ์ ๋ณด์
์ญํ = ์ธํฐํ์ด์ค
๊ตฌํ = ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค, ๊ตฌํ ๊ฐ์ฒด
๊ฐ์ฒด๋ฅผ ์ค๊ณํ ๋ ์ญํ ๊ณผ ๊ตฌํ์ ๋ช ํํ ๋ถ๋ฆฌํ์
๊ฐ์ฒด ์ค๊ณ ์ ์ญํ (์ธํฐํ์ด์ค)์ ๋จผ์ ๋ถ์ฌํ๊ณ
๊ทธ ๋ค์ ๊ทธ ์ญํ ์ ์ํํ๋ ๊ตฌํ ๊ฐ์ฒด ๋ง๋ค์
๊ฐ์ฒด์ ํ๋ ฅ์ด๋ผ๋ ๊ด๊ณ๋ถํฐ ์๊ฐํด์ผ ํ๋ค.
ํผ์ ์๋ ๊ฐ์ฒด๋ ์๋ค
ํด๋ผ์ด์ธํธ: ์์ฒญ / ์๋ฒ : ์๋ต
์๋ง์ ๊ฐ์ฒด ํด๋ผ์ด์ธํธ์ ๊ฐ์ฒด ์๋ฒ๋ ์๋ก ํ๋ ฅ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ค
์๋ต : ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ํ์๋ฅผ ํ๋ ๊ฒ
์๋ฐ ์ธ์ด์ ๋คํ์ฑ
- ์ค๋ฒ๋ผ์ด๋ฉ ๋ ๋ฉ์๋๊ฐ ์คํ
ex)
MemberService ๊ฐ save() ํธ์ถ์ ํ๋ฉด
MemberService์ ๋ค์ด์ ์๋ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์คํํ๋ค
- ๋คํ์ฑ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ฅผ ์คํ ์์ ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค
- ๋ฌผ๋ก ํด๋์ค ์์ ๊ด๊ณ๋ ๋คํ์ฑ, ์ค๋ฒ๋ผ์ด๋ฉ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค
์ค๋ฒ๋ผ์ด๋ฉ(Overriding)
๋ถ๋ชจํด๋์ค์ ๋ฉ์๋๋ฅผ ์์ํด๋์ค๊ฐ ๋์ผํ ํํ๋ก ๋๋ค์ ๊ตฌํํ๋ ํ์(๋ฉ์๋ ๋ฎ์ด์ฐ๊ธฐ)
ํ์ํ ๋์์ ์ํด ์ฌ์ ์ํ์ฌ ์ฌ์ฉ
์์๋ฐ์ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฏธ
์ค๋ฒ๋ก๋ฉ(Overloading)
๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋ ์ฌ๋ฌ ๊ฐ๋ฅผ ๊ฐ์ง๋ฉด์ ๋งค๊ฐ๋ณ์์ ์ ํ๊ณผ ๊ฐ์๊ฐ ๋ค๋ฅด๋๋ก ํ๋ ๊ธฐ์
์ค๋ฒ๋ก๋ฉ(overloading)์ด๋ ์๋ก ๋ค๋ฅธ ์๊ทธ๋์ฒ๋ฅผ ๊ฐ๋ ์ฌ๋ฌ ๋ฉ์๋๋ฅผ ํ๋์ ์ด๋ฆ์ผ๋ก ์ ์ํ๋ ๊ฒ
ํด๋ผ์ด์ธํธ๋ MemberRepository์ ์์กดํ๋ค ( ์๊ณ ์๋ค )
MemberRepository์ MemoryMemberRepository ํ ๋น ๊ฐ๋ฅ
MemberRepository์ JdbcMemberRepository ํ ๋น ๊ฐ๋ฅ
๋ถ๋ชจ ํ์ ์ผ๋ก ๋ค ๋ฐ์๋ค์ผ ์ ์๋ค
๋คํ์ฑ์ ๋ณธ์ง
- ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์คํ ์์ ์ ์ ํํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
- ๋คํ์ฑ์ ๋ณธ์ง์ ์ดํดํ๋ ค๋ฉด ํ๋ ฅ์ด๋ผ๋ ๊ฐ์ฒด์ฌ์ด์ ๊ด๊ณ์์ ์์ํด์ผ ํจ
- ํด๋ผ์ด์ธํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ฒ์ ๊ตฌํ ๊ธฐ๋ฅ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
์ญํ (์ธํฐํ์ด์ค) ์์ฒด๊ฐ ๋ณํ๋ฉด?
ํด๋ผ์ด์ธํธ, ์๋ฒ ๋ชจ๋์ ํฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ค.
์ธํฐํ์ด์ค๋ฅผ ์์ ์ ์ผ๋ก ์ ์ค๊ณํ๋ ๊ฒ์ด ์ค์ํ๋ค
์คํ๋ง๊ณผ ๊ฐ์ฒด ์งํฅ
- ๋คํ์ฑ์ด ๊ฐ์ฅ ์ค์ํ๋ค!
- ์คํ๋ง์ ๋คํ์ฑ์ ๊ทน๋ํํด์ ์ด์ฉํ ์ ์๊ฒ ๋์์ค๋ค.
- ์คํ๋ง์์ ์ด์ผ๊ธฐํ๋ ์ ์ด์ ์ญ์ (IoC), ์์กด๊ด๊ณ ์ฃผ์ (DI)์
๋คํ์ฑ์ ํ์ฉํด์ ์ญํ ๊ณผ ๊ตฌํ์ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ์ง์ํ๋ค.
- ์คํ๋ง์ ์ฌ์ฉํ๋ฉด ๋ง์น ๋ ๊ณ ๋ธ๋ก ์กฐ๋ฆฝํ๋ฏ์ด! ๊ณต์ฐ ๋ฌด๋์ ๋ฐฐ์ฐ๋ฅผ ์ ํํ๋ฏ์ด!
๊ตฌํ์ ํธ๋ฆฌํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., - ๊ฐ์ ์๊ฐ | ์ธํ๋ฐ...
www.inflearn.com