๐ค ์์กด๊ด๊ณ ์ฃผ์ ๋ฐฉ๋ฒ
โ ์์ฑ์ ์ฃผ์
์์ฑ์๋ฅผ ํตํด์ ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์ ๋ฐ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์์ฑ์ ํธ์ถ ์์ ์ 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;
}
}
๐ก ํ๋ ๋ณ์๋ฅผ final๋ก ์ ์ธํ ์ด์ ๋ ๊ฐ์ด ๊ผญ ์ค์ ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ MemberRepository์ DiscountPolicy๋ ๋ฐ๋์ ์ค์ ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ final๋ก ์ ์ธํ ํ ์์ฑ์๋ฅผ ํตํด์ ๊ฐ์ ์ค์ ํ๊ณ ์์ต๋๋ค. ( ๋ถ๋ฉด, ํ์ )
๋ํ ์์ฑ์๊ฐ ํ๋๋ง ์์ผ๋ฉด @Autowired์ด๋ ธํ ์ด์ ์ด ์์ด๋ ์๋์ผ๋ก ์ค์ ๋ฉ๋๋ค.
์์ฑ์ ์ฃผ์ ์ ์ปดํฌ๋ํธ ์ค์บ์ ํตํด bean์ ๋ฑ๋กํ๋ฉด์ ์ด์ฉ์ ์์ด ์์ฑ์๋ฅผ ํตํด bean๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์์ฐ ์ค๋ฝ๊ฒ bean๋ฑ๋ก ์์ ์ ์์กด๊ด๊ณ ์ฃผ์ ์ด ์ผ์ด๋ฉ๋๋ค.
โ Setter ์ฃผ์
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;
}
}
๐ก ์์ฑ์ ์ฃผ์ ๊ณผ ๋ฌ๋ฆฌ ์คํ๋ง ์ปจํ ์ด๋์ bean๋ฑ๋กํ๋ ์์ ์ด ์๋ ๊ทธ ๋ค์๋จ๊ณ์์ setter๋ฉ์๋๋ฅผ ํตํด ์์กด๊ด๊ณ ์ฃผ์ ์ด ๋ฐ์ํฉ๋๋ค.
โ ํ๋ ์ฃผ์
ํ๋์ ๋ฐ๋ก ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ ์ข์ง๋ง ์ธ๋ถ์์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํ ์คํธ ํ๊ธฐ ํ๋ค๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
DI ํ๋ ์์ํฌ๊ฐ ์์ผ๋ฉด ์๋ฌด๊ฒ๋ ํ ์ ์์ต๋๋ค.
@Component
public class OrderServiceImpl implements OrderService {
@Autowired private MemberRepository memberRepository;
@Autowired private DiscountPolicy discountPolicy;
}
๐ก ์์กด๊ด๊ณ๋ฅผ ์ค์ ํด์ฃผ๋ ํ๋ ์์ํฌ๊ฐ ์๋ ํ๊ฒฝ์์ ์์ํ ์๋ฐ ์ฝ๋๋ก ํ ์คํธ์ ์์กด๊ด๊ณ๋ฅผ ์ค์ ํ ์ ์๊ธฐ๋๋ฌธ์ ๊ถ์ฅ๋์ง ์๋๋ค.
๐ ์์ฑ์ ์ฃผ์ ์ ์จ์ผํ๋ ์ด์
์์กด๊ด๊ณ ์ฃผ์ ์ ํ๋ฒ ์ผ์ด๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ์์ ๊น์ง ์์กด๊ด๊ณ๋ฅผ ๋ณ๊ฒฝํ ์ผ์ด ์๋ค. ์คํ๋ ค ๋๋ถ๋ถ์ ์์กด๊ด๊ณ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ ์ ๊น์ง ๋ณํ๋ฉด ์๋๋ค.
setter ์ฃผ์ ์ setter๋ฉ์๋๋ฅผ public์ผ๋ก ์ด์ด๋๊ธฐ ๋๋ฌธ์ ๋๊ตฐ๊ฐ ์ค์๋ก ๋ณ๊ฒฐํ ์ ๋ ์๊ณ , ๋ณ๊ฒฝํ๋ฉด ์๋๋ ๋ฉ์๋๋ฅผ ์ด์ด๋๋ ๊ฒ์ ์ข์ ์ค๊ณ ๋ฐฉ๋ฒ์ด ์ด๋๋ค.
์์ฑ์ ์ finalํค์๋๋ฅผ ํตํ ์ฃผ์ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ๋ฑ 1๋ฒ๋ง ํธ์ถ๋๋ฏ๋ก ์ดํ์ ํธ์ถ๋๋ ์ผ์ด ์๋ค. ๋ฐ๋ผ์ ๋ถ๋ณํ๊ฒ ์ค๊ณํ ์ ์๋ค.
๋ํ ํ๋ ์์ํฌ ์์ด ์์ํ ์๋ฐ ์ฝ๋๋ฅผ ๋จ์ ํ ์คํธ ํ๋ ๊ฒฝ์ฐ์ ์ฃผ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋๋ฝ ํ์ ๊ฒฝ์ฐ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์ฃผ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋๋ฝํ์ง ์์ ์ ์์ต๋๋ค.
๐ Lombok์ ํตํด ์์ฑ์ ์ฃผ์
@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
}
Lombok์ด ์๋ฐ์ ์ด๋ ธํ ์ด์ ํ๋ก์ธ์ค๋ผ๋ ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ์ปดํ์ผ ์์ ์ @RequiredArgsConstructor์ด๋ ธํ ์ด์ ์ ํตํด์ final ํ๋๋ฅผ Argument๋ก ํ๋ ์์ฑ์๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค.
๐ ์ฐธ๊ณ ๋ฐ ์๋ฃ ์ถ์ฒ : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard
'Backend > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Security] ์คํ๋ง ์ํ๋ฆฌํฐ ์์๋ณด๊ธฐ, ๊ตฌ์กฐ(Filter Chain) ๋ฐ ์ธ์ฆ ๊ณผ์ (0) | 2024.03.26 |
---|---|
[Spring] ์ปดํฌ๋ํธ ์ค์บ (0) | 2024.02.08 |