/* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค.
๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */
์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข
๋ค์ํ ์์กด๊ด๊ณ ์ฃผ์ ๋ฐฉ๋ฒ
1. ์์ฑ์ ์ฃผ์
โ ์ด๋ฆ ๊ทธ๋๋ก ์์ฑ์๋ฅผ ํตํด ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ๋ฐ๋ ๋ฐฉ๋ฒ.
โ ์์ฑ์ ํธ์ถ์์ ์ ๋ฑ ํ ๋ฒ๋ง ํธ์ถ๋๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค.
โ `๋ถ๋ณ, ํ์` ์์กด๊ด๊ณ์ ์ฌ์ฉ
OrderServiceImpl
@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;
}
}
โพ ๋ถ๋ณ : ์ ์ฝ๋์์ `memberRepository`์ `discountPolicy`๋ final ํค์๋๋ก ์ ์ธ๋์ด ์๋ค. ์ด๋ ๊ฐ์ฒด ์์ฑ ํ ๋ณ๊ฒฝ๋์ง ์์์ ์๋ฏธํ๋ค.
โพ ํ์ : ์ ์ฝ๋์์ ๊ฐ์ฒด๋ฅผ final๋ก ์ ์ธํ๋ค. ๊ทธ ๋ป์ ์๋ ๋ฌด์กฐ๊ฑด ๊ฐ์ด ์์ด์ผ ํ๋ค๋ ๋ป์ด๋ฉฐ ์์ฑ์๋ก ๊ฐ์ ํ์๋ก ์ฃผ์ ํด์ฃผ์ด์ผ ํ๋ค.
โพ ์ฌ๊ธฐ์ ์ค์ํ ์ ! ์์ฑ์๊ฐ ๋ฑ 1๊ฐ๋ง ์์ผ๋ฉด @Autowired๋ฅผ ์๋ตํด๋ ๋๋ค(์์ฆ์ ์ด๋ ๊ฒ ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ํ์ฌ)
2. ์์ ์ ์ฃผ์ (setter ์ฃผ์ )
โ setter๋ผ ๋ถ๋ฆฌ๋ ํ๋์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ์์ ์ ๋ฉ์๋๋ฅผ ํตํด ์์กด๊ด๊ณ ์ฃผ์
โ ์ ํ, ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ์๋ ์์กด๊ด๊ณ์ ์ฌ์ฉ
โ ์๋ฐ๋น ํ๋กํผํฐ ๊ท์ฝ์ ์์ ์ ๋ฉ์๋ ๋ฐฉ์์ ์ฌ์ฉ
OrderServiceImpl
@Component
public class OrderServiceImpl implements OrderService{
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Autowired
public void setDiscountPolicy(DiscountPolicy discountPolicy) {
this.discountPolicy = discountPolicy;
}
}
โพ @Autowired์ ๊ธฐ๋ณธ ๋์์ ์ฃผ์ ํ ๋์์ด ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ๋์์ด ์์ด๋ ๋์ํ๊ฒ ํ๋ ค๋ฉด @Autowired(required = false)๋ก ์ง์ ํ๋ฉด ๋๋ค.
3. ํ๋ ์ฃผ์
โ ์ด๋ฆ ๊ทธ๋๋ก ํ๋์ ๋ฐ๋ก ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ
โ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ ๋ง์ ๊ฐ๋ฐ์๋ค์ ์ ํนํ์ง๋ง ์ธ๋ถ์์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํด์ ํ ์คํธํ๊ธฐ ํ๋ฆ
โ DI ํ๋ ์์ํฌ๊ฐ ์์ผ๋ฉด ์๋ฌด๊ฒ๋ ํ ์ ์๋ค
โ ๊ฒฐ๋ก : ์ฌ์ฉํ์ง ๋ง์
OrderServiceImpl
@Component
public class OrderServiceImpl implements OrderService{
@Autowired
private MemberRepository memberRepository;
@Autowired
private DiscountPolicy discountPolicy;
}
โพ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ์ฝ๋์ ๊ด๊ณ์๋ ํ ์คํธ์ฝ๋, ์คํ๋ง ์ค์ ์ ๋ชฉ์ ์ผ๋ก ํ๋ @Counfiguration ๊ฐ์ ๊ณณ์์๋ง ํน๋ณํ ์ฉ๋๋ก ์ฌ์ฉ
4. ์ผ๋ฐ ๋ฉ์๋ ์ฃผ์
โ ์ผ๋ฐ ๋ฉ์๋๋ฅผ ํตํด ์ฃผ์ ๋ฐ์ ์ ์๋ค.
โ ํ๋ฒ์ ์ฌ๋ฌ ํ๋๋ฅผ ์ฃผ์ ๋ฐ์ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉํ์ง ์์
OrderServiceImpl
@Component
public class OrderServiceImpl implements OrderService{
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired
public void init(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
โพ ๋น์ฐํ ์ด์ผ๊ธฐ์ง๋ง ์์กด๊ด๊ณ ์๋ ์ฃผ์ ์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ์คํ๋ง ๋น์ด์ด์ผ ๋์ํ๋ค. ์คํ๋ง ๋น์ด ์๋ Member ๊ฐ์ ํด๋์ค์์ @Autowired ์ฝ๋๋ฅผ ์ ์ฉํด๋ ์๋ฌด ๊ธฐ๋ฅ๋ ๋์ํ์ง ์๋๋ค.