4๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
1. ์์ฑ์ ์ฃผ์
2. setter ์ฃผ์
3. ํ๋ ์ฃผ์
4. ์ผ๋ฐ ๋ฉ์๋ ์ฃผ์
1. ์์ฑ์ ์ฃผ์
- ์์ฑ์๋ฅผ ํตํด์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ๋ฐ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์์ฑ์ ํธ์ถ์์ ์ 1๋ฒ๋ง ํธ์ถ๋๋ ๊ฒ์ด ๋ณด์ฅ๋๋ฏ๋ก ์ฃผ๋ก ๋ถ๋ณ์ด๋ ํ์ ์์กด๊ด๊ณ์ ์ฌ์ฉํ๋ค.
- ์์กด๊ด๊ณ๋ฅผ public set๋ฉ์๋๋ฅผ ํตํด์ ์์ ํ์ง ๋ชปํ๊ฒ ํ ๋ ์ฌ์ฉํ๋ค.
- ์์ฑ์๊ฐ 1๊ฐ์ผ๋๋ @Autowired๋ฅผ ๋ถ์ฌ์ฃผ์ง ์์๋ ๋๋ค.
- ์ปดํฌ๋ํธ ์ค์บ์ด ๋ ๋ Spring Bean์ ๋ฑ๋กํ๊ธฐ์ํด new๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด์ ๊ฐ์ด ์์ฑ์๊ฐ ํธ์ถ๋์ด ์ฃผ์ ๋๋ค.
- final ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ ์์ฑ์์์ ๊ฐ์ด ์ค์ ๋์ง ์๋ ์ค๋ฅ๋ฅผ ์ปดํ์ผ ์์ ์ ๋ง์์ค๋ค.
@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. setter ์ฃผ์
- setter์ @Autowired๋ฅผ ๋ถ์ฌ์ ๊ตฌํํ๋ค.
- ์ปดํฌ๋ํธ ์ค์บ ๊ณผ์ ์ ํตํด Spring Container์ ํด๋น ํด๋์ค ๊ฐ์ฒด๋ฅผ Spring bean์ผ๋ก ๋ฑ๋กํ๊ฒ ๋๊ณ ๊ทธ ๋ค์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ํ๋ ๊ณผ์ ์์ setter๊ฐ ์คํ๋์ด ์ฃผ์ ๋๋ค.
- ์ ํ์ ์ด๊ณ ๋ณ๊ฒฝ๊ฐ๋ฅํ ์์กด๊ด๊ณ ์ฃผ์
์ ์ฌ์ฉํ๋ค.
- ๋ง์ฝ์ MemberRepository๋ฅผ setter๋ก ์ฃผ์ ํ๋ ๋ฉ์๋๊ฐ ์์ ๋ MemberRepository๊ฐ Spring Bean์ผ๋ก ๋ฑ๋ก๋์ด ์์ง ์์๋ ์ฃผ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์
- required = false๋ฅผ ํตํด ์ ํ์ ์ผ๋ก ์ฃผ์ ํ ์ ์๋๋ก ํจ
- ์ค๊ฐ์ MemberRepository๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ ๋๋ ์ฌ์ฉ๊ฐ๋ฅ ํจ
@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;
}
...
}
3. ํ๋ ์ฃผ์
- ํ๋์ ๋ฐ๋ก ์ฃผ์ ์ ํ๋ ๋ฐฉ์์ด๋ค.
- ์ฝ๋๊ฐ ์งง์์ ธ์ ์ข์ ๋ณด์ด์ง๋ง ์ธ๋ถ์์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ํ ์คํธ ํ๊ธฐ๊ฐ ํ๋ค๋ค๋ ๋จ์ ์ด ์กด์ฌํ๋ค.
- ์ค์ ๋ก ์ฝ๋๋ฅผ ์์ฑํด๋ณด๋ฉด ๋ ธ๋์ค๋ก ์ถ์ฒํ์ง ์๋๋ค๊ณ ๋ฌ๋ค.
- ๊ฒฐ๊ตญ์๋ ๋์ค์ ๋ณ๊ฒฝํ๊ณ ์ถ์ผ๋ฉด setter๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ๊ทธ๋ด๋ฐ์๋ setter์ฃผ์ ์ ์ฐ์ง..
- ์ด ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ์ง๋ง๊ณ ์ด๋ค ๊ฒฝ์ฐ์ ์จ๋ ๋๋๋ฉด
- ์ดํ๋ฆฌ์ผ์ด์ ์ ์ค์ ์ฝ๋์ ๊ด๊ณ ์๋ ํ ์คํธ ์ฝ๋
- ์คํ๋ง ์ค์ ์ ๋ชฉ์ ์ผ๋ก ํ๋ @Configuration ๊ฐ์ ๊ณณ์์๋ง ํน๋ณํ ์ฉ๋๋ก ์ฌ์ฉ
@Component
public class OrderServiceImpl implements OrderService {
@Autowired private final MemberRepository memberRepository;
@Autowired private final DiscountPolicy discountPolicy;
....
}
4. ์ผ๋ฐ ๋ฉ์๋ ์ฃผ์
- ์ผ๋ฐ ๋ฉ์๋๋ฅผ ํตํด ์ฃผ์ ๋ฐ์ ์ ์๋ค.
- ํ๋ฒ์ ์ฌ๋ฌ ํ๋๋ฅผ ์ฃผ์ ๋ฐ์ ์ ์๋ค.
- ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉX
@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;
}
1. ์ต์ ์ฒ๋ฆฌ
- ์ฃผ์ ํ ์คํ๋ง ๋น์ด ์กด์ฌํ์ง ์์๋ ๋์ํด์ผ ํ ๋ ์๋ ใ ใ ์ ๋์์ ์ต์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด 3๊ฐ์ง ์กด์ฌํ๋ค.
- 1. @Autowired(required = false) : ์๋์ผ๋ก ์ฃผ์ ํ ๋์์ด ์กด์ฌํ์ง ์์ผ๋ฉด setter ๋ฉ์๋ ์์ฒด๊ฐ ํธ์ถ๋์ง ์์
- 2. org.springframework.lang.@Nullable: ์๋ ์ฃผ์ ํ ๋์์ด ์์ผ๋ฉด null์ด ์ ๋ ฅ๋๋ค.
- 3. Optional<>: ์๋ ์ฃผ์ ํ ๋์์ด ์์ผ๋ฉด Optional.empty๊ฐ ์ ๋ ฅ๋๋ค.
'๐ Backend > ๐ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ธ๋ฆฟ(Servlet)์ด ๋ฌด์์ธ์ง ๊ฐ์ด ์์๋ณด์! (0) | 2022.07.18 |
---|---|
Bean Scope๊ฐ ๋ญ๊น? (0) | 2022.07.13 |
IOC, DI, Container (0) | 2022.07.05 |
๊ฐ์ฒด์งํฅ ์ค๊ณ์ ์คํ๋ง (0) | 2022.07.02 |
SOLID ์์น (0) | 2022.07.02 |