์์กด๊ด๊ณ ์ฃผ์ ์ ํฌ๊ฒ 4๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ๊ฐ๊ฐ์ ๋ฐฉ๋ฒ๊ณผ ํน์ง์ ๋ํด์ ์์๋ณด๋๋ก ํ์.
(๋ค์ด๊ฐ๊ธฐ์ ์์ ์์กด๊ด๊ณ ์๋ ์ฃผ์ ์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ์คํ๋ง ๋น์ด์ด์ผ ๋์ํ๋ค๋ ๊ฒ์ ์ฃผ์ํ์.)
1. ์์ฑ์ ์ฃผ์ ๐ช
1. ๊ฐ๋
์์ฑ์๋ฅผ ํตํด์ ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ
@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;
}
}
2. ํน์ง
(1) ์์ฑ์ ํธ์ถ์์ ์ ๋ฑ 1๋ฒ๋ง ํธ์ถ๋๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค.
(2) ๋ถ๋ณ
์์ ์์ ์์ MemberRepository์ DiscountPolicy๋ฅผ ์์ ํ ์ ์๋ค.
(3) ํ์
์ธ์คํด์ค๊ฐ ํ์์ ์ผ๋ก ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ๋ฐ์ ์ ์๋ค.
@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;
}
}
(4) ์์ฑ์๊ฐ 1๊ฐ๋ผ๋ฉด @Autowired๋ฅผ ์๋ตํ ์ ์๋ค.
2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ์๋ ์๋ต์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ฆ, ์์ฑ์๊ฐ 2๊ฐ ์ด์์ด๋ฉด ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ํ๋ ์์ฑ์์ @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;
// ์์ฑ์1
public OrderServiceImpl(){
}
// ์์ฑ์2
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
2. ์์ ์ ์ฃผ์ (setter ์ฃผ์ ) ๐ซ
1. ๊ฐ๋
์์ ์ ๋ฉ์๋(setter)๋ฅผ ํตํด์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ
@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;
}
}
2. ํน์ง
(1) ์ ํ
์ฃผ์ ํ ๋์์ด ์๋ ๊ฒฝ์ฐ(์คํ๋ง ๋น์ ์ฃผ์ ํ ๋์์ด ์๋ ๊ฒฝ์ฐ) @Autowired๋ฅผ ๊ทธ๋ฅ ์ฌ์ฉํ๋ฉด ์ค๋ฅ๊ฐ ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ @Autowired(required = false)๋ฅผ ์ด์ฉํ๋ฉด ์ ํ์ ์ผ๋ก ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ํ ์ ์๋ค.
@Component
public class OrderServiceImpl implements OrderService {
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired(required = false)
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Autowired
public void setDiscountPolicy(DiscountPolicy discountPolicy) {
this.discountPolicy = discountPolicy;
}
}
(2) ๋ณ๊ฒฝ
์ธ๋ถ์์ ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ธ์คํด์ค๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
3. ํ๋ ์ฃผ์ ๐ฆ
1. ๊ฐ๋
ํ๋์ ๋ฐ๋ก ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ
@Component
public class OrderServiceImpl implements OrderService {
@Autowired
private MemberRepository memberRepository;
@Autowired
private DiscountPolicy discountPolicy;
}
2. ํน์ง
(1) ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
IntelliJ์์ 'Field injection is not recommended'๋ผ๊ณ ํ์๋ ํด์ฃผ๊ณ ์๋ค...
(2) ํ ์คํธ์ ์ด๋ ค์์ด ์๋ค.
ํ๋ ์ฃผ์ ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์์ํ ์๋ฐ ํ ์คํธ๋ฅผ ์ํด ์ธ์คํด์ค๋ฅผ ์ค์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํ ์คํธ์์ @Autowired๋ ๋์ํ์ง ์๊ฒ ๋๊ณ ์ธ์คํด์ค๋ ๋น์ฐํ null์ด ๋๋ค.
๊ตณ์ด ํด๋น ๋ฐฉ๋ฒ์ผ๋ก ํ ์คํธ๋ฅผ ํ๋ ค๋ฉด setMemberRepository์ setDiscountPolicy์ฒ๋ผ setter๋ฅผ ๋ง๋ค์ด์ผ ํ๋๋ฐ, ๊ทธ๋ฌ๋ฉด ๊ฒฐ๊ตญ ์์์ ์ดํด๋ณธ ์์ ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ ๊ฒ ๋ซ๋ค.
4. ์ผ๋ฐ ๋ฉ์๋ ์ฃผ์ ๐ฆฅ
1. ๊ฐ๋
์ผ๋ฐ ๋ฉ์๋๋ฅผ ํตํด์ ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ(์๋ฌด๋ฐ ๋ฉ์๋์ @Autowired๋ฅผ ์ฌ์ฉํ๋ ๊ฒ)
@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;
}
}
2. ํน์ง
(1) ํ ๋ฒ์ ์ฌ๋ฌ ํ๋๋ฅผ ์ฃผ์ ๋ฐ์ ์ ์๋ค.
ํ์ง๋ง, ์์ฑ์ ์ฃผ์ ๊ณผ ์์ ์ ์ฃผ์ ๋ ์ฌ๋ฌ ํ๋๋ฅผ ์ฃผ์ ๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ๋ฐฉ์ ๋ํ ์ ์ฌ์ฉ๋์ง ์๋๋ค.
5. ์ ๋ฆฌ ๐ฆ
๋ฐฉ๋ฒ | ์์ฑ์ ์ฃผ์ | ์์ ์ ์ฃผ์ (setter ์ฃผ์ ) | ํ๋ ์ฃผ์ | ์ผ๋ฐ ๋ฉ์๋ ์ฃผ์ |
ํน์ง | ๋ถ๋ณ ํ์ |
์ ํ ๊ฐ๋ฅ ๋ณ๊ฒฝ ๊ฐ๋ฅ |
ํ ์คํธ์ ์ด๋ ค์ | ์์ฑ์ ์ฃผ์ ๊ณผ ์์ ์ ์ฃผ์ด๋ธก๋ก ๋์ฒด ๊ฐ๋ฅ |
ํด๋น ๊ธ์ ๊น์ํ ๋์ '์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ'์ ์ฐธ๊ณ ํ์์ต๋๋ค.
'๐ ์คํ๋ง > ๊ธฐ๋ณธ ๊ฐ๋ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP ์์ฒญ(ํค๋, ํ๋ผ๋ฏธํฐ, ๋ฉ์์ง) ์ฒ๋ฆฌ (0) | 2023.04.20 |
---|---|
์คํ๋ง MVC (0) | 2023.04.19 |
์์กด์ฑ ์ฃผ์ - DI(Dependency Injection) (0) | 2023.04.18 |
๋ก๊น (SLF4J, Logback) (0) | 2023.04.09 |
์์ฑ์ ์ฃผ์ ์ ์ ํํ๋ผ! (0) | 2023.04.07 |