-
์คํ๋ง์ด ์ฌ๋ํ ๋์์ธ ํจํด๊ฐ๋ฐ/Spring Boot 2022. 5. 31. 00:51
๋์์ธ ํจํด - ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ์ ๋ฆฌํ ๊ฒ
์คํ๋ง ํ๋ ์ ์ํฌ : ์๋ฐ ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์ ํธํ๊ฒ ํด์ฃผ๋ ์คํ์์ค ๊ฒฝ๋๊ธ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ
์ด๋ํฐ ํจํด : ๋ณํ๊ธฐ. ์๋ก ๋ค๋ฅธ ๋ ์ธํฐํ์ด์ค ์ฌ์ด์ ํต์ ์ด ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ.
ํ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ๊ณ ์ํ๋ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ก ๋ณํํ๋ค.
์ด๋ํฐ๋ฅผ ์ด์ฉํ๋ฉด ์ธํฐํ์ด์ค ํธํ์ฑ ๋ฌธ์ ๋๋ฌธ์ ๊ฐ์ด ์ธ ์ ์๋ ํด๋์ค๋ค์ ์ฐ๊ฒฐํด์ ์ธ ์ ์๋ค.
JDBC๊ฐ ์ด๋ํฐ ํจํด์ ์ด์ฉํด ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๋จ์ผํ ์ธํฐํ์ด์ค๋ก ์กฐ์ํ ์ ์๊ฒ ํด์ค๋ค.
ํ๋ก์ ํจํด : ์ ์ด ํ๋ฆ์ ์กฐ์ ํ๊ฑฐ๋ ๋ณ๋์ ๋ก์ง์ฒ๋ฆฌ์ ๋ชฉ์ ์ผ๋ก ์ค๊ฐ์ ๋๋ฆฌ์๋ฅผ ๋๋ ํจํด
ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ๋ ๋ฐํ๊ฐ์ ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ๋ณ๊ฒฝํ์ง ์๋๋ค.
- ๋๋ฆฌ์๋ ์ค์ ์๋น์ค์ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ค. ์ด๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
- ๋๋ฆฌ์๋ ์ค์ ์๋น์ค์ ๋ํ ์ฐธ์กฐ ๋ณ์๋ฅผ ๊ฐ๋๋ค(ํฉ์ฑ)
- ๋๋ฆฌ์๋ ์ค์ ์๋น์ค์ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ๊ทธ ๊ฐ์ ํด๋ผ์ด์ธํธ์๊ฒ ๋๋ ค์ค๋ค.
- ๋๋ฆฌ์๋ ์ค์ ์๋น์ค์ ๋ฉ์๋ ํธ์ถ ์ ํ์ ๋ณ๋์ ๋ก์ง์ ์ํํ ์๋ ์๋ค.
--> ๊ฐ๋ฐฉํ์์์น, ์์กด์ญ์ ์์น
๋ญ๊ฐ ๋ฌด๊ฑฐ์ด์์ ๋ค์ด ๋ง์๋ ์ผ์ผ์ด ๋ค ํด๋์ค๋ฅผ ์์ฑํ๊ธฐ์ ๋ถ๋ด์ด ๋๋๊น, ๊ทธ๋ด๋ ๊ฐ๋ฒผ์ด ์์ ๋ค์ ํ๋ก์ํจํด์ ์จ์ค๋ค. ์์ ๋ชฉ๋ก์ด ์์๋, ์ ํ๋ธ ์ฒ๋ผ ์ ์ฒด ๋ชฉ๋ก์ด ๋ณด์ฌ์ง๋๋ ์ ๋ชฉ๋ง ๋ณด์ฌ์ฃผ๋๋กํ๋ค๊ฐ, ์์์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๋ฉด, ํ๋ฆฌ๋ทฐ๋ฅผ ๋ณด์ฌ์ค๋ค๊ณ ํ ๋. ์ ๋ชฉ๋ง ๋ณด์ฌ์ค์์๋ ํ๋ก์๋ก ์์ฑ๋๊ฒ ํ๊ณ ํ๋ฆฌ๋ทฐ ๋ฌด๊ฑฐ์ด์์ ์ ์ค์ ํด๋์ค๋ฅผ ์์ฑํด์ ์์ ํ๋ค๊ณ ํ๋ค. ํ๋ก์ ๊ฐ์ฒด๋ก ์์ฑ๋ ์ธ๋ค์ผ์ ์ปค์๋ฅผ ์ฌ๋ฆด๋, ์ค์ ํด๋์ค๊ฐ ํธ์ถ๋์ ํ๋ฆฌ๋ทฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ํ๋ค.
๋ฐ์ฝ๋ ์ดํฐ ํจํด : ๋ฉ์๋์ ํธ์ถ์ ๋ฐํ๊ฐ์ ๋ณํ๋ฅผ ์ฃผ๊ธฐ ์ํด ์ค๊ฐ์ ์ฅ์์๋ฅผ ๋๋ ํจํด
- ์ฅ์์๋ ์ค์ ์๋น์ค์ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ค. ์ด๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
- ์ฅ์์๋ ์ค์ ์๋น์ค์ ๋ํ ์ฐธ์กฐ ๋ณ์๋ฅผ ๊ฐ๋๋ค(ํฉ์ฑ)
- ์ฅ์์๋ ์ค์ ์๋น์ค์ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ , ๊ทธ ๋ฐํ๊ฐ์ ์ฅ์์ ๋ํด ํด๋ผ์ด์ธํธ์๊ฒ ๋๋ ค์ค๋ค.
- ์ฅ์์๋ ์ค์ ์๋น์ค์ ๋ฉ์๋ ํธ์ถ ์ ํ์ ๋ณ๋์ ๋ก์ง์ ์ํํ ์๋ ์๋ค.
--> ๊ฐ๋ฐฉํ์์์น, ์์กด์ญ์ ์์น
์ฑ๊ธํด ํจํด : ์ธ์คํด์ค๋ฅผ ํ๋๋ง ๋ง๋ค์ด ์ฌ์ฉํ๊ธฐ ์ํ ํจํด
์ปค๋ฅ์ ํ, ์ค๋ ๋ ํ, ๋๋ฐ์ด์ค ์ค์ ๊ฐ์ฒด ๋ฑ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ธ์คํด์ค๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค๊ฒ ๋๋ฉด ๋ถํ์ํ ์์์ ์ฌ์ใ ใ ํ๊ฒ ๋๊ณ , ๋ ํ๋ก๊ทธ๋จ์ด ์์์น ๋ชปํ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ ์ ์๋ค. ์ค์ง ์ธ์คํด์ค ํ๋๋ง ๋ง๋ค๊ณ ๊ทธ๊ฒ์ ๊ณ์ ์ฌ์ฌ์ฉํ๋ค.
- new๋ฅผ ์คํํ ์ ์๋๋ก ์์ฑ์์ private ์ ๊ทผ ์ ์ด์๋ฅผ ์ง์ ํ๋ค.
- ์ ์ผํ ๋จ์ผ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์๋ ์ ์ ๋ฉ์๋๊ฐ ํ์ํ๋ค.
- ์ ์ผํ ๋จ์ผ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์ ์ฐธ์กฐ ๋ณ์๊ฐ ํ์ํ๋ค.
์น ํ๋ฉด์ ๋คํฌ๋ชจ๋, ๋ผ์ดํธ๋ชจ๋๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ.
ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด : ์์ ํด๋์ค์ ๊ฒฌ๋ณธ ๋ฉ์๋์์ ํ์ ํด๋์ค๊ฐ ์ค๋ฒ๋ผ์ด๋ฉํ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ํจํด (์์)
์ถ์ํด๋์ค๋ฅผ ์๊ฐํ์. abstract ๋ฉ์๋๋ ์๊ณ , ์๋ (ํ ๋ฉ์๋)๊ฐ ์๋ค. ๊ทธ๋์ ์์ ํด๋์ค์ ๊ณตํต ๋ก์ง์ ์ํํ๋ ํฌํ๋ฆฟ ๋ฉ์๋์ ํ์ ํด๋์ค์ ์ค๋ฒ๋ผ์ด๋ฉ์ ๊ฐ์ ํ๋ ์ถ์ ๋ฉ์๋ ๋๋ ์ ํ์ ์ผ๋ก ์ค๋ฒ๋ผ์ด๋ฉํ ์ ์๋ ํ ๋ฉ์๋๋ฅผ ๋๋ ํจํด์ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ด๋ผ๊ณ ํ๋ค.
--> ์์กด ์ญ์ ์์น(DIP)
ํฉํฐ๋ฆฌ ๋ฉ์๋ ํจํด : ์ค๋ฒ๋ผ์ด๋๋ ๋ฉ์๋๊ฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ํจํด (์์)
--> ์์กด ์ญ์ ์์น(DIP)
์ ๋ต ํจํด : ํด๋ผ์ด์ธํธ(๊ตฐ์ธ)๊ฐ ์ ๋ต์ ์์ฑํด ์ ๋ต์ ์คํํ ์ปจํ ์คํธ์ ์ฃผ์ ํ๋ ํจํด (์ธํฐํ์ด์ค)
๋จ์ผ ์์๋ง ๊ฐ๋ฅํ ์๋ฐ ์ธ์ด์์๋ ์์์ด๋ผ๋ ์ ํ์ด ์๋ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด๋ณด๋ค๋ ์ ๋ต ํจํด์ ๋ ๋ง์ด ํ์ฉํ๋ค.
--> ๊ฐ๋ฐฉ ํ์ ์์น(OCP), ์์กด ์ญ์ ์์น(DIP)
๊ฒ์์ ํ๋๋ฐ ๋ชจ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ, ์ ์ฒด๋ ์ด๋ฏธ์ง๋ ๋ด์ค๋ ์ง๋ ์ฒ๋ผ ๋ชจ๋๊ฐ ๋ฐ๋ ๋๋ง๋ค ๊ฒ์์ด ์ด๋ค์ง๋ ๋ฐฉ์ ์ฆ ์ ๋ต์ด ๋ฐ๋๋ ๊ฒฝ์ฐ.
๊ธฐ์กด์๋ mode๋ผ๋ ๋ณ์์ ์ด๋ค ๋ชจ๋์ธ์ง๋ฅผ ๋ด๊ณ , ๊ทธ ๊ฐ์ ๋ฐ๋ผ if ๋ฌธ์ ๊ฑธ์ด์ ๋ณ๊ฒฝํด์ฃผ๋ ์์ผ๋ก ํ๋ค.
์ด๊ฒ์ ์ข์ ์ค๊ณ๋ผ๊ณ ํ ์ ์๋ค. ๋ชจ๋๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ๊ฐ๊ฐ ๋ค ์์ ํด์ค์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๊ฒ์ ๊ฐ์ฒด์งํฅ์ ์ฒ ํ์ ์ด๊ธ๋๋ ์ค๊ณ์ด๋ค.
์ ๋ตํจํด์ ์ด์ฉํ๋ฉด, ๊ฐ ๋ชจ๋๋ง๋ค ๋์๋ค์ ํ๋ํ๋๋ก ๋ค ๋ชจ๋ํ๋ฅผ ํด์, ์ด ๋ฒํผ๋ค์ ๋๋ฅผ๋๋ง๋ค, ๊ฐ์๋ผ์์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋๊ฒ์ด๋ค.
์ ๋ต ํจํด๊ณผ ์ ์ฌํ ์ปค๋งจ๋ํจํด, ์คํ ์ดํธ ํจํด...
ํ ํ๋ฆฟ ์ฝ๋ฐฑ ํจํด : ์ ๋ต ํจํด์ด๋ ๋์ผํ๋ฐ, ๋ค๋ฅธ ๊ฒ์ ์ด ์ ๋ต์ ์ต๋ช ๋ด๋ถ ํด๋์ค๋ก ์ ์ํด์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด๋ค.
์ ๋ตํจํด์ ์ ๋ต์ด๋ผ๋ ์ธํฐํ์ด์ค๊ฐ ์๋ค๊ณ ์น๋ฉด, ์ด์ ์๋์ง, ํ์ ์๋์ง, ์นผ์ ์ฐ๋์ง ๊ฐ๊ฐ์ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋๊ณ ์ด ์ ๋ต ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด๋๊ณ , ๊ตฐ์ธ์ด๋ผ๋ ํด๋์ค๊ฐ ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ๋ฉ์๋๋ฅผ Strategy ๋ผ๋ ์ธํฐํ์ด์ค ๊ฐ์ฒด๋ก ๋ฐ์ ์ ์๋๋ก ํด์ ๊ฐ๊ฐ์ ์ ๋ต์ ๋ง๊ฒ ์ฌ์ฉํ๋ค๋ฉด, ์ฌ๊ธฐ์๋ ๊ฐ๊ฐ์ ์ ๋ต๋ฐฉ๋ฒ๋ค์ ๋ํ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋์ง ์๋๋ค. ๋์ ์ ๋ฉ์ธํด๋์ค์์ ์ ๋ต ์ปจํ ์คํธ๋ฅผ ์คํํ ๋ ์ต๋ช ํด๋์ค๋ก ๊ตฌํ์ ํด์ ์ด๋ค. //ํน์ ์ด๋ฅผ ๋ ๊ฐ๋จํ๊ฒ ํ๊ธฐ์ํด์ ๋ฆฌํฉํฐ๋ง์ ํ๋ค๋ฉด, ๊ตฐ์ธ ํด๋์ค์์ ๊ณตํต์ ๋ฉ์๋๋ฅผ ํ๋ ๋ ๋๊ณ ๊ฑฐ๊ธฐ์ ์ต๋ช ํด๋์ค๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋จํ๊ฒ ํํ๋ ๊ฐ๋ฅํ๋ค. -> ์ค๋ณต๋๋ ๋ถ๋ถ์ ์ปจํ ์คํธ๋ก ์ด๊ดํ๋ค.
--> ์์กด์ฑ ์ฃผ์ (DI)
--> ๊ฐ๋ฐฉ ํ์ ์์น(OCP), ์์กด ์ญ์ ์์น(DIP)
'๊ฐ๋ฐ > Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Http Message Converter ์ด์ผ๊ธฐ(2) (0) 2022.07.07 HTTP Message Converter ์ด์ผ๊ธฐ(1) (0) 2022.07.07 HTTP API ์๋ต ์ ๋ฆฌ (0) 2022.07.07 ๊ฐ์ฒด ์งํฅ ์ค๊ณ 5์์น - SOLID (0) 2022.05.24 ์คํ๋ง ํ๋ ์์ํฌ(Spring Framework)์ ๋คํ์ฑ(Polymorphism)(1) (0) 2022.02.08