์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์
๋๋ค. ์ด์ ๊ธ์์ AppConfig์ฒ๋ผ DI์ IoC๋ฅผ ํด์ฃผ๋ ๊ฒ์ DI ์ปจํ
์ด๋๋ผ๊ณ ๋ถ๋ฅธ๋ค๋ ์ด์ผ๊ธฐ๋ฅผ ํ์๋ค. ์ด๋ฒ์๋ ์คํ๋ง์์ DI์ IoC๋ฅผ ์ ๊ณตํ๋ ์คํ๋ง ์ปจํ
์ด๋์ ๋ํด ์์๋ณด์. 1. ์คํ๋ง ์ปจํ
์ด๋๋? ์คํ๋ง ์ปจํ
์ด๋๋ ์ปจํ
์ด๋์ ๋ฑ๋ก๋ ๊ฐ์ฒด๋ค์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ๊ฐ์ฒด๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋ ๊ฐ์ฒด๋ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ์คํ๋ง ๋น ์ฌ์ด์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์
ํ๋ ๊ฒ ๋ฐ๋ก ์คํ๋ง ์ปจํ
์ด๋์ ์ญํ ์ด๋ค. ์ด์ ๊ธ์์ ๋ณด์๋ AppConfig์ ์ญํ ์ ๋ด๋นํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ธฐ์กด์ AppConfig์๋ ๋ญ๊ฐ ๋ค๋ฅด๊ธธ๋ ๊ตณ์ด ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ์ฐ๋ ๊ฑธ๊น? 2. ์คํ๋ง ์ปจํ
์ด๋ ์ค์ ..
๐๐ฉ๐ซ๐ข๐ง๐
์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์
๋๋ค. ์ด์ ๊ธ์์ ๋คํ์ฑ๋ง์ผ๋ก๋ OCP, DIP๋ฅผ ์งํฌ ์ ์๋ค๋ ๊ฒ๊น์ง ์์๋ณด์๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ OCP, DIP๋ฅผ ์งํฌ ์ ์์๊น? ๋ฐ๋ก DI์ IoC๋ฅผ ์ด์ฉํ๋ฉด ์งํฌ ์ ์๋ค. ๊ฐ๋จํ ์์๋ฅผ ํตํด ์์๋ณด์. ์ฌ๊ธฐ ์ฃผ๋ฌธ ์๋น์ค๊ฐ ์๋ค. ์ฃผ๋ฌธ ์๋น์ค๋ ํ ์ธ ์ ์ฑ
์ ๋ฐ์์ ํ ์ธ ๊ธ์ก์ ๊ณ์ฐํด์ผ ํ๋ค. ํ ์ธ ์ ์ฑ
์ ํฌ๊ฒ 2์ข
๋ฅ๊ฐ ์๋๋ฐ, ๊ณ ์ ๊ธ์ก ํ ์ธ ์ ์ฑ
(FixDiscountPolicy)๊ณผ ๊ณ ์ ๋น์จ ํ ์ธ ์ ์ฑ
(RateDiscountPolicy)์ด ์๋ค. public class OrderServiceImpl { // private final DiscountPolicy discountPolicy = new FixDiscount..
์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ-๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์
๋๋ค. ์ด์ ํฌ์คํ
์์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ๋ฅผ ์คํํ๊ธฐ ์ํด์๋ ๋คํ์ฑ์ ์ ์ง์ผ์ผ ํ๋ค๋ ์ด์ผ๊ธฐ๋ฅผ ํ๋ค. ํ์ง๋ง ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ๋ํด ์ ๋๋ก ์ดํดํ๋ ค๋ฉด, ๋คํ์ฑ ์ธ์๋ ์๊ธ์๋ฅผ ๋ฐ์ SOLID๋ผ ๋ถ๋ฆฌ๋ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น์ ๋ํด ์ดํดํด์ผ ํ๋ค. SRP: ๋จ์ผ ์ฑ
์ ์์น (Single Responsibility Principle) ํ๋์ ํด๋์ค๋ ํ๋์ ์ฑ
์๋ง ๊ฐ์ ธ์ผ ํ๋ค. ํ๋์ ์ฑ
์์ด๋ผ๋ ๋ง์ ๋ชจํธํ๊ธฐ ๋๋ฌธ์, ์ด ํด๋์ค๊ฐ ์ฑ
์์ด ํ๋์ธ์ง ์ฌ๋ฌ๊ฐ์ธ์ง ํท๊ฐ๋ฆด ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ, ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ์ ๋์ ํ๊ธ ํจ๊ณผ๋ฅผ ๋ณด๋ฉด SRP๋ฅผ ์ ์ง์ผฐ๋์ง ํ์ธํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ์ฌ๋ฃ ๊ธฐ๋ฐ ๋ ์ํผ ๊ฒ์ ์๋น์ค์์ ์ฌ๋ฃ ํด๋์ค๋ฅผ ..
์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ-๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์
๋๋ค. Spring์ด๋? ์คํ๋ง์ ๋ฌธ๋งฅ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ง ์๋ฏธ๋ฅผ ๊ฐ๋๋ค. ์คํ๋ง ์ํ๊ณ ์ ์ฒด๋ฅผ ์๋ฏธํ๊ธฐ๋ ํ์ง๋ง, ์คํ๋ง DI ์ปจํ
์ด๋๋ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์๋ฏธํ๋ ๊ฒฝ์ฐ๋ ์๋ค. ์คํ๋ง์ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ์ ์ ๋ชจ์์ผ๋ก, Spring Boot, Spring Framework, Spring Data ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ๊ณต์ ํํ์ด์ง์ ๊ฐ๋ฉด ์๋ ์ฌ์ง๋ณด๋ค ๋ ๋ง์ ๊ธฐ์ ๋ค์ ํ์ธํ ์ ์๋ค. ๋ง์ ๊ธฐ์ ๋ค ์ฌ์ด์์๋ ๋ํ์ ์ธ ๊ธฐ์ ์ด ์๋ค๋ฉด, ๋ฐ๋ก ์คํ๋ง ํ๋ ์์ํฌ์ ์คํ๋ง ๋ถํธ์ด๋ค. ์คํ๋ง ํ๋ ์์ํฌ๋ ์ค๋ฆฌ์ง๋ํฉ์ ํด๋นํ๋ ๊ธฐ์ ๋ก, ์คํ๋ง DI ์ปจํ
์ด๋, AOP, JDBC ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ง์ํ๋ค. ์คํ๋ง ๋ถํธ๋ ํ์ฅํฉ์ด์ง๋ง ์์ฆ์๋ ํ..