[์คํ๋ง ๊ธฐ๋ณธ] 01. ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง
by Hi.Claire๐ฅ๏ธ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ (๊น์ํ, ์ธํ๋ฐ)
์น์ 1. ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง
01-2. ์ด์ผ๊ธฐ - ์๋ฐ ์ง์์ ์ถ์ด ๊ฒจ์ธ๊ณผ ์คํ๋ง์ ํ์
EJB(Enterprise Java Beans)
์คํ๋ง ํ์ ์ด์ ์ ๋ง์ด ํ์ฉํ๋ ๊ธฐ์ ์ด๋ค.
์ด๋ก ์ ์ผ๋ก๋ ์ข์์ผ๋ ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ๊ธฐ์ ๋ณต์กํ๊ณ ์ด๋ ต๊ณ ๋๋ฆฌ๋ค๋ ๋ฌธ์ ๊ฐ ์์๋ค.
EJB ์์กด์ ์ผ๋ก ์ฝ๋๋ฅผ ์ง์ผํด์ ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง๋ ๋ฌธ์ ๋ ์์๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํ๊ณ ์ ๊ฐ๋จํ ๋ฐฉ์์ ์๋ฐ Object๋ฅผ ์ฐ๋ ์๋ ๋ก ๋์๊ฐ์๋ ์๋ฏธ๋ก POJO(Plain Old Java Object)๋ผ๋ ๊ฐ๋ ๋ ๋ฑ์ฅํ๋ค.
์คํ๋ง์ ๋ฑ์ฅ
ํ์ฌ์ Spring Framework๋ Rod Johnson์ ์ ์ <Expert One-on-One J2EE Design and Development>์ ์์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก๋ค.
EJB ์ปจํ ์ด๋๋ฅผ ๋์ฒดํ์ฌ ์ฌ์ค์ ํ์ฌ์ ํ์ค ๊ธฐ์ ์ด ๋์๋ค.
๋จ์ํจ์ ์น๋ฆฌ
Gavin King์ ์ ์ <Java Persistence with Hibernate>๋ ํ์ฌ์ JPA(Java Persistence API)๋ผ๋ ์๋ก์ด ํ์ค์ ๊ธฐ๋ฐ์ด ๋์๋ค.
EJB ์ํฐํฐ๋น ๊ธฐ์ ์ ๋์ฒดํ๊ฒ ๋์๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ ํ์ค ์ธํฐํ์ด์ค๊ฐ ๋จผ์ ์ ํด์ง๊ณ , ๊ทธ ๊ตฌํ์ฒด๋ฅผ ๊ฐ๋ฐํ๋ ์์๋ก ์งํ์ด ๋์ง๋ง JPA ํ์ค์ ๊ทธ ๋ฐ๋์ ์์๋ก ์ ์๋์๋ค.
์ค๋ฌด์์ ์ฌ์ฉ๋๋ ๊ตฌํ์ฒด์ธ Hibernate๋ฅผ ๊ฐ์ง๊ณ JPA ํ์ค์ ์ ์ํจ์ผ๋ก์จ ์ค์ฉ์ฑ๊ณผ ์์ ์ฑ์ ๋ชจ๋ ๊ฐ์ถ ์ ์์๋ค.
์คํ๋ง์ ์ญ์ฌ
Rod Johnson์ ์ ์ <Expert One-on-One J2EE Design and Development>์์ EJB ์์ด๋ ์ถฉ๋ถํ ๊ณ ํ์ง์ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์์ ๋ณด์ฌ์ฃผ๊ณ , 30,000 ๋ผ์ธ ์ด์์ ๊ธฐ๋ฐ ๊ธฐ์ ์ ์์ ์ฝ๋๋ก ์ ๋ณด์๋ค.
์ด ์์ ์ฝ๋์ ์คํ๋ง ํต์ฌ ๊ฐ๋ ์ธ BeanFactory, ApplicationContext, POJO, ์ ์ด์ ์ญ์ , ์์กด๊ด๊ณ ์ฃผ์ ๋ฑ์ ๋ด์ฉ๊ณผ ๊ธฐ๋ฐ ์ฝ๋๊ฐ ๋ค์ด ์๋ค.
์ฑ ์ถ๊ฐ ์งํ Juergen Hoeller, Yann Caroff ๋ฑ์ ๊ฐ๋ฐ์๊ฐ ์คํ ์์ค ํ๋ก์ ํธ๋ฅผ ์ ์ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ก ์ ํต์ ์ธ J2EE(EJB)๋ผ๋ ๊ฒจ์ธ์ ๋์ด ์๋ก์ด ์์์ด๋ผ๋ ๋ป์ ์ง๋ ์คํ๋ง์ด ํ์ํ๊ฒ ๋์๋ค.
2023๋ 10์ ํ์ฌ ์คํ๋ง ํ๋ ์์ํฌ 6.0.x, ์คํ๋ง ๋ถํธ 3.1.x ๋ฒ์ ๊น์ง ์ถ์๋์๋ค.
01-3. ์คํ๋ง์ด๋?
์คํ๋ง ์ํ๊ณ
Spring Framework
1. ํต์ฌ ๊ธฐ์ : ์คํ๋ง DI ์ปจํ ์ด๋, AOP, ์ด๋ฒคํธ, ๊ธฐํ
2. ์น ๊ธฐ์ : ์คํ๋ง MVC, ์คํ๋ง WebFlux
3. ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ : ํธ๋์ญ์ , JDBC, ORM ์ง์, XML ์ง์
4. ๊ธฐ์ ํตํฉ : ์บ์, ์ด๋ฉ์ผ, ์๊ฒฉ์ ๊ทผ, ์ค์ผ์ค๋ง
5. ํ ์คํธ : ์คํ๋ง ๊ธฐ๋ฐ ํ ์คํธ ์ง์
6. ์ธ์ด : ์ฝํ๋ฆฐ, ๊ทธ๋ฃจ๋น
Spirng Boot
์คํ๋ง์ ๋ค์ํ ๊ธฐ์ ์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํด์ค๋ค.
๋จ, ์คํ๋ง ๋ถํธ ๋จ๋ ์ผ๋ก ์ฌ์ฉํ ์๋ ์๋ค.
โ๏ธ ์คํ๋ง ๋ถํธ์ ์ฅ์
1. ๋จ๋ ์ผ๋ก ์คํํ ์ ์๋ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ์์ฑํ ์ ์๋ค.
2. Tomcat ๊ฐ์ ์น ์๋ฒ๋ฅผ ๋ด์ฅํด์ ๋ณ๋์ ์น ์๋ฒ๋ฅผ ์ค์นํ์ง ์์๋ ๋๋ค.
3. ์์ฌ์ด ๋น๋ ๊ตฌ์ฑ์ ์ํ starter ์ข ์์ฑ์ ์ ๊ณตํ๋ค.
4. ์คํ๋ง๊ณผ 3rd party(์ธ๋ถ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๋ ๊ตฌ์ฑํด์ค๋ค. ์์ ์๋ ์คํ๋ง ๋ฒ์ ๋ณ๋ก ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ๋ง์ถ๊ธฐ๊ฐ ์ด๋ ค์ ๋๋ฐ ์คํ๋ง ๋ถํธ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ๊น์ง ์๋์ผ๋ก ๊ตฌ์ฑํด์ค๋ค.
5. ๋ฉํธ๋ฆญ, ์ํ ํ์ธ, ์ธ๋ถ ๊ตฌ์ฑ ๊ฐ์ ํ๋ก๋์ ์ค๋น ๊ธฐ๋ฅ(์ด์ ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ)์ ์ ๊ณตํ๋ค.
6. ๊ด๋ก์ ์ํ ๊ฐ๊ฒฐํ ์ค์ ์ ์ธ ์ ์์ด ํธ๋ฆฌํ๋ค.
์คํ๋ง์ ์ ๋ง๋ค์๋์?
์คํ๋ง์ ์๋ฐ ์ธ์ด ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ์ด๋ค.
์๋ฐ ์ธ์ด์ ๊ฐ์ฅ ํฐ ํน์ง์ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ผ๋ ๊ฒ์ธ๋ฐ, ์คํ๋ง์ ๊ฐ์ฒด ์งํฅ ์ธ์ด๊ฐ ๊ฐ์ง ๊ฐ๋ ฅํ ํน์ง์ ์ด๋ ค๋ด๋ ํ๋ ์์ํฌ์ด๋ค.
์ฆ, ์คํ๋ง์ ์ง์ง ํต์ฌ์ ์ข์ ๊ฐ์ฒด ์งํฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๊ฒ ๋์์ฃผ๋ ํ๋ ์์ํฌ๋ผ๋ ๊ฒ์ด๋ค.
01-4. ์ข์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋?
๊ฐ์ฒด ์งํฅ ํน์ง
1. ์บก์ํ
2. ์ถ์ํ
3. ์์
4. ๋คํ์ฑ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ค์ ๋ชจ์์ผ๋ก ํ์ ํ๊ณ ์ ํ๋ ๊ฒ์ด๋ค.
๊ฐ์ฒด๋ค์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ํ๋ ฅํ๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๋ง์ด ์ฌ์ฉ๋๋ค.
โ๏ธ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ด?
๋ง์น ๋ ๊ณ ๋ธ๋ญ์ ์กฐ๋ฆฝํ๋ฏ์ด, ํค๋ณด๋๋ ๋ง์ฐ์ค๋ฅผ ๊ฐ์ ๋ผ์ฐ๋ฏ์ด, ์ปดํจํฐ์ ๋ถํ์ ๊ฐ์ ๋ผ์ฐ๋ฏ์ด ์ปดํฌ๋ํธ๋ฅผ ์ฝ๊ณ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ๋ฉด์ ๊ฐ๋ฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ ๊ฐ์ฒด ์งํฅ์ ์ฌ๋ฌ ํน์ง ์ค์์ ํนํ ๋คํ์ฑ๊ณผ ๋ฐ์ ํ ๊ด๋ จ์ด ์๋ค.
๋คํ์ฑ(Polymorphism)
์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ
โ๏ธ ๋คํ์ฑ์ ์ค์ธ๊ณ ๋น์
์ด์ ์๋ ์๋์ฐจ ๊ตฌํ ๋์์ด K3์ด๋ ํ ์ฌ๋ผ ๋ชจ๋ธ3์ด๋ ์๊ด์์ด ์ด์ ์ ํ ์ ์๋ค.
์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ
์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ฉด ์ธ์์ด ๋จ์ํด์ง๊ณ , ์ ์ฐํด์ง๋ฉฐ ๋ณ๊ฒฝ๋ ํธ๋ฆฌํด์ง๋ค.
โ๏ธ ์ฅ์
1. ํด๋ผ์ด์ธํธ๋ ๋์์ ์ญํ (์ธํฐํ์ด์ค)๋ง ์๋ฉด ๋๋ค.
2. ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๋๋ค.
3. ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
4. ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์ ์์ฒด๋ฅผ ๋ณ๊ฒฝํด๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
โ๏ธ ์๋ฐ ์ธ์ด์ ์ ์ฉ
์๋ฐ ์ธ์ด์ ๋คํ์ฑ์ ํ์ฉํ์ฌ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ์ญํ : ์ธํฐํ์ด์ค
- ๊ตฌํ : ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค, ๊ตฌํ ๊ฐ์ฒด
๊ฐ์ฒด๋ฅผ ์ค๊ณํ ๋ ์ญํ ๊ณผ ๊ตฌํ์ ๋ช ํํ ๋ถ๋ฆฌํ๋ค.
๊ฐ์ฒด ์ค๊ณ์ ์ญํ (์ธํฐํ์ด์ค)๋ฅผ ๋จผ์ ๋ถ์ฌํ๊ณ , ๊ทธ ์ญํ ์ ์ํํ๋ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
๊ฐ์ฒด์ ํ๋ ฅ์ด๋ผ๋ ๊ด๊ณ๋ถํฐ ์๊ฐ
๋คํ์ฑ์ ๋ณธ์ง์ ์ดํดํ๋ ค๋ฉด ํ๋ ฅ์ด๋ผ๋ ๊ฐ์ฒด ์ฌ์ด์ ๊ด๊ณ์์ ์์ํด์ผ ํ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๋ฉด ์๋ฒ๊ฐ ์๋ตํ๋ ๋ฐฉ์์ผ๋ก ์ ๋ง์ ๊ฐ์ฒด ํด๋ผ์ด์ธํธ์ ๊ฐ์ฒด ์๋ฒ๋ ์๋ก ํ๋ ฅ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์๋ฒ๋ ์๋ฒ ์ญํ ์ ์ํํ๋ ๋์์ ํด๋ผ์ด์ธํธ๋ก์ ๋ค๋ฅธ ์๋ฒ์๋ ์์ฒญ์ ํ ์ ์๋ค.
โ๏ธ ํ๋ ฅ์์์ ์๋ฐ ์ธ์ด์ ๋คํ์ฑ
์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด์ Overriding ๋ ๋ฉ์๋๊ฐ ์คํ๋๋ค.
๋คํ์ฑ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ฅผ ์คํ ์์ ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ฒ์ ๊ตฌํ ๊ธฐ๋ฅ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
์ ๋ฆฌ
์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ ํ์ฅ ๊ฐ๋ฅํ ์ค๊ณ๊ฐ ๊ฐ๋ฅํ๋ค.
ํด๋ผ์ด์ธํธ์ ์ํฅ์ ์ฃผ์ง ์๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ฐ, ์ด๋ฅผ ์ํด์๋ ์ธํฐํ์ด์ค๋ฅผ ์์ ์ ์ผ๋ก ์ ์ค๊ณํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ฐ๋๋ก ์๊ฐํด๋ณด๋ฉด ์ญํ (์ธํฐํ์ด์ค) ์์ฒด๊ฐ ๋ณํ๋ฉด ํด๋ผ์ด์ธํธ, ์๋ฒ ๋ชจ๋์ ํฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ฐ๋ผ์ ๋ค์ ํ ๋ฒ, ์ธํฐํ์ด์ค๋ฅผ ์์ ์ ์ผ๋ก ์ ์ค๊ณํ๋ ๊ฒ์ด ์ค์ํ๋ค.
์คํ๋ง๊ณผ ๊ฐ์ฒด ์งํฅ
์คํ๋ง์ ๋คํ์ฑ์ ๊ทน๋ํํด์ ์ด์ฉํ ์ ์๊ฒ ๋์์ค๋ค.
์คํ๋ง์์์ ์ ์ด์ ์ญ์ (IoC), ์์กด๊ด๊ณ ์ฃผ์ (DI)์ ๋คํ์ฑ์ ํ์ฉํด์ ์ญํ ๊ณผ ๊ตฌํ์ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ์ง์ํ๋ค.
01-5. ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น (SOLID)
SOLID
Clean Code๋ก ์ ๋ช ํ Robert Martin์ด ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น์ ์ ๋ฆฌํ๋ค.
1. SRP : ๋จ์ผ ์ฑ ์ ์์น (Single Responsibility Principle)
2. OCP : ๊ฐ๋ฐฉ-ํ์ ์์น (Open-Closed Principle)
3. LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov Substitution Principle)
4. ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface Segregation Principle)
5. DIP : ์์กด๊ด๊ณ ์ญ์ ์์น (Dependency Inversion Principle)
SRP : ๋จ์ผ ์ฑ ์ ์์น (Single Responsibility Principle)
ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค.
๊ทธ๋ฌ๋ ํ๋์ ์ฑ ์์ด๋ผ๋ ๊ฒ์ ๋ชจํธํ๋ค.
์ด๋ ์ค์ํ ๊ธฐ์ค์ ๋ณ๊ฒฝ์ด๋ค. ๋ณ๊ฒฝ์ด ์์ ๋ ํ๊ธ ํจ๊ณผ๊ฐ ์ ์ผ๋ฉด ๋จ์ผ ์ฑ ์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ์ด๋ค.
OCP : ๊ฐ๋ฐฉ-ํ์ ์์น (Open-Closed Principle)
์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค ์์ผ๋, ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
๊ทธ๋ฌ๋ ํ์ฅ์ ํ๋ ค๋ฉด ๋น์ฐํ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ์ ๋ฐ์ ์์ง ์์๊น?
์ด๋ ๋คํ์ฑ์ ํ์ฉํด๋ณด์. ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์๋ก์ด ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค์ด์ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
โ๏ธ ๋ฌธ์ ์
MemberService ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์ง์ ์ ํํ๊ณ ์๋ค.
๋ฐ๋ผ์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์์ ๊ฐ์ด ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
๋ถ๋ช ๋คํ์ฑ์ ํ์ฉํ์ง๋ง OCP ์์น์ ์งํฌ ์ ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ๋ณ๋์ ์กฐ๋ฆฝ, ์ค์ ์๊ฐ ํ์ํ๋ค.
์ด๊ฒ์ ์คํ๋ง์์ ์ง์ํด์ค๋ค๊ณ ํ๋ค. (๋์ค์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์ ์๊ฒ ๋ ๊ฒ์ด๋ค.)
LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov Substitution Principle)
ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค.
์ฆ, ๋คํ์ฑ์์ ํ์ ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ท์ฝ์ ๋ค ์ง์ผ์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ ๋คํ์ฑ์ ์ง์ํ๊ธฐ ์ํ ์์น์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ฅผ ๋ฏฟ๊ณ ์ฌ์ฉํ๋ ค๋ฉด ์ด ์์น์ด ํ์ํ๋ค.
์๋ฅผ ๋ค์ด, ์๋์ฐจ ์ธํฐํ์ด์ค์ accel์ ์์ผ๋ก ๊ฐ๋ผ๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก ์๋์ฐจ ๊ตฌํ์ฒด๊ฐ ์ด๋ฅผ ๋ค๋ก ๊ฐ๊ฒ ๊ตฌํํ๋ฉด LSP๋ฅผ ์๋ฐํ ๊ฒ์ด๋ค. ๋๋ฆฌ๊ฒ ๊ฐ๋๋ผ๋ ์์ผ๋ก ๊ฐ์ผ ํ๋ค.
ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface Segregation Principle)
ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๋ซ๋ค.
(์์)
- ์๋์ฐจ ์ธํฐํ์ด์ค : ์ด์ ์ธํฐํ์ด์ค, ์ ๋น ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌ
- ์ฌ์ฉ์ ํด๋ผ์ด์ธํธ : ์ด์ ์ ํด๋ผ์ด์ธํธ, ์ ๋น์ฌ ํด๋ผ์ด์ธํธ๋ก ๋ถ๋ฆฌ
์ด๋ ๊ฒ ๋ถ๋ฆฌํ๋ฉด ์ ๋น ์ธํฐํ์ด์ค ์์ฒด๊ฐ ๋ณํด๋ ์ด์ ์ ํด๋ผ์ด์ธํธ์๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
์ด ์์น์ ํตํด ์ธํฐํ์ด์ค๊ฐ ๋ช ํํด์ง๊ณ ๋์ฒด ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
DIP : ์์กด๊ด๊ณ ์ญ์ ์์น (Dependency Inversion Principle)
"ํ๋ก๊ทธ๋๋จธ๋ ์ถ์ํ์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค."
์์กด์ฑ ์ฃผ์ ์ ์ด ์์น์ ๋ฐ๋ฅด๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ค.
์ฝ๊ฒ ์ด์ผ๊ธฐํ๋ฉด, ๊ตฌํ ํด๋์ค์ ์์กดํ์ง ๋ง๊ณ ์ญํ (์ธํฐํ์ด์ค)์ ์์กดํ๋ผ๋ ๋ป์ด๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ญํ (์ธํฐํ์ด์ค)์ ์์กดํด์ผ ์ ์ฐํ๊ฒ ๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. ๋ง์ฝ ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌํ์ฒด์ ์์กดํ๊ฒ ๋๋ฉด ๋ณ๊ฒฝ์ด ์์ฃผ ์ด๋ ค์์ง๋ค.
โ๏ธ ๋ฌธ์ ์
๊ทธ๋ฐ๋ฐ ์์ MemberService๋ ์ธํฐํ์ด์ค์ ์์กดํ์ง๋ง ๋์์ ๊ตฌํ ํด๋์ค์๋ ์์กดํ๋ค.
์ด๋ DIP๋ฅผ ์๋ฐํ ๊ฒ์ด๋ค. ์ด ๋ฌธ์ ์ญ์ ์คํ๋ง์์ ํด๊ฒฐํด์ฃผ๋ฏ๋ก ๊ฐ์๋ฅผ ๊ณ์ ๋ค์ด๋ณด์.
์ ๋ฆฌ
๊ฐ์ฒด ์งํฅ์ ํต์ฌ์ ๋คํ์ฑ์ด๋ค.
๊ทธ๋ฌ๋ ๋คํ์ฑ๋ง์ผ๋ก๋ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ ํจ๊ป ๋ณ๊ฒฝ๋๋ค.
์ด๋ OCP, DIP๋ฅผ ์๋ฐํ ๊ฒ์ด๋ค.
๋ญ๊ฐ ๋ ํ์ํ๋ฐ ์ด๊ฒ์ ์คํ๋ง์์ ์ ๊ณตํด์ค ๊ฒ์ด๋ค.
01-6. ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง
์คํ๋ง์ด ์๋ ์์ ๋ก
์์ํ๊ฒ ์๋ฐ๋ก OCP, DIP ์์น๋ค์ ์งํค๋ฉด์ ๊ฐ๋ฐ์ ํด๋ณด๋ฉด, ๊ฒฐ๊ตญ ์คํ๋ง ํ๋ ์์ํฌ(์ ํํ๊ฒ๋ DI ์ปจํ ์ด๋)๋ฅผ ๋ง๋ค๊ฒ ๋๋ค.
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง
์คํ๋ง์ DI ์ปจํ ์ด๋๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ๋คํ์ฑ๊ณผ OCP, DIP๋ฅผ ๊ฐ๋ฅํ๋๋ก ์ง์ํ๋ค.
๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ ์ฝ๋์ ๋ณ๊ฒฝ์์ด ๊ธฐ๋ฅ ํ์ฅ์ด ๊ฐ๋ฅํ๋ฉฐ, ๊ฐ๋ฐ์๋ ์ฝ๊ฒ ๋ถํ์ ๊ต์ฒดํ๋ฏ์ด ๊ฐ๋ฐํ ์ ์๋ค.
DI(Dependency Injection)
์์กด๊ด๊ณ ์ฃผ์ , ์์กด์ฑ ์ฃผ์
์ ๋ฆฌ
๋ชจ๋ ์ค๊ณ์ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ์.
์ด์์ ์ผ๋ก๋ ๋ชจ๋ ์ค๊ณ์ ์ญํ (์ธํฐํ์ด์ค)๋ฅผ ๋ถ์ฌํด์ ๊ตฌํ์ฒด๋ ์ธ์ ๋ ์ง ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋๋ก ๋ง๋๋ ๊ฒ์ด ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ๋ค.
ํ์ง๋ง ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋ฉด ์ถ์ํ๋ผ๋ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
๋ฐ๋ผ์ ๊ธฐ๋ฅ์ ํ์ฅํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด ๊ตฌ์ฒด ํด๋์ค๋ฅผ ์ง์ ์ฌ์ฉํ๊ณ , ํฅํ ๊ผญ ํ์ํ ๋ ๋ฆฌํฉํ ๋งํด์ ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋ ๊ฒ๋ ํ ๋ฐฉ๋ฒ์ด๋ค.
'๐ฑ Spring > ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Claire's Study Note
Hi.Claire