์์ ์ด์ผ๊ธฐํ ์์กด๊ด๊ณ ์ฃผ์ (DI)๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 4๊ฐ์ง๊ฐ ์๋ค.
์์ฑ์๋ฅผ ํตํ ์ฃผ์ ๋ฐฉ๋ฒ, ์์ ์(Setter๋ฅผ ํตํด์) ์ฃผ์ ๋ฐฉ๋ฒ, ํ๋์ ์ง์ ์ฃผ์ (๋ณ์ ํ๋์ ์ง์ @Autowired ๋ถ์) ๋ฐฉ๋ฒ, ์ผ๋ฐ ๋ฉ์๋๋ฅผ ํตํ ์ฃผ์ ๋ฐฉ๋ฒ์ด ์๋ค!
์ฐ์ ์ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๊ฐ๋จํ ์ ๋ฆฌํ์๋ฉด~~
์์ ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด set??? ๋ฉ์๋๋ฅผ public์ผ๋ก ์ด์ด ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๊ตฐ๊ฐ ์ค์๋ก ๋ณ๊ฒฝํ ์ ์๊ธฐ์ ์ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋๊ณ ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณค ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
ํ๋ ์ฃผ์
์ ํ๋๋ช
์๋ง @Autowired๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ ๋ง ๊ฐ๊ฒฐํ์ฌ ๊ฐ๋ฐ์๋ค์ ์ ํนํ์ง๋ง ์ธ๋ถ์์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํด์ ํ
์คํธ ํ๊ธฐ ํ๋ค๋ค. ๋ฐ๋ผ์ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ค.
โญ๏ธ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์ฑ์ ์ฃผ์
๋ฐฉ๋ฒ์ด๋ค.
์์ฑ์ ์ฃผ์
๋ฐฉ๋ฒ์ด ์ฃผ์ด๊ธฐ ๋๋ฌธ์ ์์ฑ์ ๋ฐฉ๋ฒ์ ๋ํด์๋ง ๋ค๋ค๋ณด๋ ค ํ๋ค.
์์ฑ์ ์ฃผ์ ๋ฐฉ๋ฒ์ ์ง๊ธ๊น์ง ์์์ ๋ณด์๋ ์์ ์์ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ด๋ค.
ํน์ง
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
์ด ๋ฐฉ๋ฒ์ด ์ค์ํ ์ด์ ๋ ๋ถ๋ณ, ํ์์ ์๋ค.
๋๋ผ๋ง๋ผ๋ ์์ฌ๋ก ์๋ฅผ ๋ค์ด ๋ณด๊ฒ ๋ค. ๋๋ผ๋ง๋ ๋ฐฐ์ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ํด๋๊ณ ์ดฌ์์ ๋ค์ด๊ฐ๊ณ , ๋ฐฉ์๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๋ฐฐ์ฐ๊ฐ ์ค๊ฐ์ ์ฃผ์ฐ ๋ฐฐ์ฐ์๊ฒ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ๋ฐฐ์ฐ๊ฐ ๊ต์ฒด๋๋ค๊ณ ์๊ฐํด๋ณด์....๐คญ ์์ฒญ์ ์ ์ฅ์์ ํผ๋์ค๋ฌ์ธ ๊ฒ์ด๋ค.
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicydiscountPolicy) {
this.memberRepository = memberRepository;
//this.discountPolicy = discountPolicy
}
}
์์ ์ฝ๋์ ๊ฐ์ด discountPolicy์ ๋ํด ๊ฐ์ ์ค์ ํด์ผ ํ๋๋ฐ ์ฃผ์์ผ๋ก ๋๋ฝ ์์ผฐ๋ค. ์์ฑ์๋ฅผ ํตํ ์ฃผ์ ๋ฐฉ๋ฒ์์๋ ํ๋์ final ํค์๋ค ์ ์ฝ๋์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ์ค์ ๋์ง ์๋ ์ค๋ฅ๋ฅผ ์ปดํ์ผ ์์ ์ ๋ง์์ค๋ค๐๐ป๐๐ป
๐ ์ปดํ์ผ ์ค๋ฅ์ด๋ค!! ๋๋ ์ฒ์์ ๋ชจ๋ ์ค๋ฅ๊ฐ ๋ค ์์ข์ ๊ฒ์ด๋ผ ์๊ฐํ๋ค. ๊ทธ๋ฌ๋ ํ๋ก๊ทธ๋จ ์คํ ์์ ์ธ ๋ฐํ์ ์ ์ ๋๋ ์๋ฌ์ด๋ฏ๋ก ์ธ์์์ ๊ฐ์ฅ ๋น ๋ฅด๊ณ , ๊ฐ์ฅ ์ข์ ์ค๋ฅ์ด๋ค!!