μ€νλ§ ν΅μ¬ μ리μ κ°μ λ΄μ©μ μ 리ν ν¬μ€ν μ λλ€.
μμ‘΄κ΄κ³ μ£Όμ λ°©λ²
μμ±μ μ£Όμ
μμ±μλ₯Ό ν΅ν΄ μμ‘΄ κ΄κ³λ₯Ό μ£Όμ λ°λ λ°©λ²μΌλ‘, μμ±μ νΈμΆ μμ μ λ± ν λ²λ§ νΈμΆλλ©° λΆλ³ νΉμ νμμ μΈ μμ‘΄ κ΄κ³ μ£Όμ μ μ¬μ©λλ€.
μμ±μκ° ν κ°λ§ μμ κ²½μ° μ€νλ§ λΉμ νν΄μ @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;
}
}
μμ μ μ£Όμ (setter μ£Όμ )
μμ μ λ©μλ(setter)λ₯Ό ν΅ν΄μ μμ‘΄ κ΄κ³λ₯Ό μ£Όμ νλ λ°©λ²μΌλ‘, μ νμ μ΄κ±°λ λ³κ²½ κ°λ₯μ±μ΄ μλ μμ‘΄ κ΄κ³ μ£Όμ μ μ¬μ©λλ€.
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Autowired
public void setDiscountPolicy(DiscountPolicy discountPolicy) {
this.discountPolicy = discountPolicy;
}
νλ μ£Όμ
νλμ μμ‘΄ κ΄κ³λ₯Ό μ£Όμ νλ λ°©λ²μΌλ‘, μ½λκ° κ°κ²°νμ§λ§ μΈλΆμμ λ³κ²½μ΄ λΆκ°λ₯νμ¬ ν μ€νΈνκΈ°κ° μ΄λ ΅κ³ DI νλ μμν¬κ° λ°λμ μμ΄μΌ νλ€λ λ¬Έμ μ μ΄ μλ€.
λ°λΌμ μ€μ μ½λμ κ΄κ³ μλ ν μ€νΈ μ½λλ, μ€νλ§ μ€μ μ λͺ©μ μΌλ‘ νλ @Configurationμ²λΌ νΉλ³ν μ©λκ° μλ μ΄μ μ¬μ©μ μ§μνλ νΈμ΄ μ’λ€.
@Component
public class OrderServiceImpl implements OrderService {
@Autowired
private final MemberRepository memberRepository;
@Autowired
private final DiscountPolicy discountPolicy;
μΌλ° λ©μλ μ£Όμ
μΌλ° λ©μλλ₯Ό ν΅ν΄ μμ‘΄ κ΄κ³λ₯Ό μ£Όμ νλ λ°©λ²μΌλ‘, ν λ²μ μ¬λ¬ νλλ₯Ό μ£Όμ λ°μ μ μλ€λ νΉμ§μ΄ μμ§λ§ μΌλ°μ μΌλ‘λ μ μ¬μ©νμ§ μλλ€.
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public void init(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
μμ±μ μ£Όμ κΆμ₯
μμ‘΄ κ΄κ³ μ£Όμ μ μμ±μ μ£Όμ λ°©μμ κΆμ₯νλλ°, κ·Έ μ΄μ λ λ€μκ³Ό κ°λ€.
1. λλΆλΆμ μμ‘΄ κ΄κ³ μ£Όμ μ μΌλ¨ λ°μν μ΄ν μ ν리μΌμ΄μ μ’ λ£ μμ κΉμ§ λ³κ²½λ μΌμ΄ μκΈ° λλ¬Έμ κ°μ²΄λ₯Ό μμ±ν λ λ± ν λ²λ§ νΈμΆλλ ν΄λΉ λ°©μμ μ΄μ©νλ©΄ λΆλ³νκ² μ€κ³ν μ μλ€.
2. μμ μ μ£Όμ λ°©μμ μ¬μ©ν κ²½μ°
2-1. setter λ©μλλ₯Ό publicμΌλ‘ μ΄μ΄λμ΄μΌ νλλ°, λ³κ²½ κ°λ₯μ±μ΄ μ‘΄μ¬νλ λ©μλλ₯Ό μ΄μ΄λλ κ²μ μ’μ μ€κ³ λ°©λ²μ΄ μλλ€.
2-2. νλ μμν¬λ₯Ό μ΄μ©ν κ²½μ°μλ @Autowiredκ° λμνκΈ° λλ¬Έμ μμ‘΄ κ΄κ³κ° μμΌλ©΄ μ»΄νμΌ μλ¬κ° λ°μνλ€.
κ·Έλ¬λ νλ μμν¬ μμ΄ μμν μλ° μ½λλ₯Ό λ¨μ ν μ€νΈνλ€κ³ κ°μ νμ λ μμ‘΄ κ΄κ³κ° λλ½λμ΄λ μ€νμ λμ§λ§ NPE(Null Pointer Exception)κ° λ°μνκ² λλ€.
νμ§λ§ μμ±μ μ£Όμ μ μ¬μ©νλ©΄ νλ μμν¬λ₯Ό μ΄μ©νμ§ μλ μν©μμλ μ£Όμ λ°μ΄ν°κ° λλ½λλ©΄ μ»΄νμΌ μλ¬κ° λ°μνκΈ° λλ¬Έμ μ΄λ€ κ°μ νμλ‘ μ£Όμ ν΄μΌ νλμ§ μ½κ² μ μ μλ€.
3. μμ±μ μ£Όμ μ μ¬μ©νλ©΄ νλμ final ν€μλλ₯Ό μ¬μ©ν μ μκΈ° λλ¬Έμ, μμ±μμμ κ°μ΄ μ€μ λμ§ μμ κ²½μ° μ»΄νμΌ μμ μ μ€λ₯λ₯Ό λ°μμμΌ νμλ‘ μ£Όμ ν΄μΌ νλ κ°μ μ½κ² μ μ μλ€.
νμ§λ§ μμ±μ μ£Όμ μ μ μΈν λ€λ₯Έ μ£Όμ λ°©μμ λͺ¨λ μμ±μ μ΄νμ νΈμΆλλ―λ‘ νλμ final ν€μλλ₯Ό μ¬μ©ν μ μλ€.
μ 리νμλ©΄ μμ±μ μ£Όμ λ°©μμ μ ννλ μ΄μ λ νλ μμν¬μ μμ‘΄νμ§ μκ³ μμν μλ° μΈμ΄μ νΉμ§μ μ μ΄λ¦΄ μ μκΈ° λλ¬Έμ΄λΌκ³ λ³Ό μ μλ€.
λ°λΌμ κΈ°λ³Έμ μΌλ‘ μμ±μ μ£Όμ μ μ¬μ©νλ νμ κ°μ΄ μλ κ²½μ°μλ μμ μ μ£Όμ λ°©μμ μ΅μ μΌλ‘ λΆμ¬νμ¬ λμμ μ¬μ©νλ λ°©λ²μ μ νν μ μλ€. (νλ μ£Όμ λ°©μμ κΆμ₯ X)
μ΅μ μ²λ¦¬
μ£Όμ ν μ€νλ§ λΉμ΄ μμ΄λ λμν΄μΌ ν μν©μ΄ μ‘΄μ¬νλλ°, @Autowiredλ§ μ΄μ©ν κ²½μ° required μ΅μ μ κΈ°λ³Έκ°μ΄ trueλ‘ λμ΄μκΈ° λλ¬Έμ μλ μ£Όμ λμμ΄ μμΌλ©΄ μ€λ₯κ° λ°μνλ€.
μλ μ£Όμ λμμ μ΅μ μΌλ‘ μ²λ¦¬νλ λ°©λ²μ λ€μκ³Ό κ°λ€.
1. @Autowired(required = false)
: μλ μ£Όμ
ν λμμ΄ μμΌλ©΄ μμ μ λ©μλ μμ²΄κ° νΈμΆλμ§ μμ
2. org.springframework.lang.@Nullable
: μλ μ£Όμ
ν λμμ΄ μμΌλ©΄ nullμ΄ μ
λ ₯λλ€.
3. Optional<>
: μλ μ£Όμ
ν λμμ΄ μμΌλ©΄ Optional.empty
κ° μ
λ ₯λλ€.
//νΈμΆ μλ¨
@Autowired(requried = false)
public void setNoBean1(Member member) {
System.out.println("setNoBean1 = " + member);
}
//null νΈμΆ
@Autowired
public void setNoBean2(@Nullable Member member) {
System.out.println("setNoBean2 = " + member);
}
//Optional.empty νΈμΆ
@Autowired(requried = false)
public void setNoBean3(Optional<Member> member) {
System.out.println("setNoBean3 = " + member);
}
μΆλ ₯ λ‘κ·Έλ₯Ό νμΈν΄λ³΄λ©΄ λ€μκ³Ό κ°μ΄ λμ€λ κ²μ μ μ μλ€.
setNoBean = null
setNoBean = Optional.empty
'Language & Framework > Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ€νλ§ ν΅μ¬ μ리] λΉ μλͺ μ£ΌκΈ° μ½λ°± (0) | 2023.01.10 |
---|---|
[μ€νλ§ ν΅μ¬ μ리] μμ‘΄κ΄κ³ μλ μ£Όμ (2) (0) | 2022.12.21 |
[μ€νλ§ ν΅μ¬ μ리] μ±κΈν€ 컨ν μ΄λ (0) | 2022.12.20 |
[μ€νλ§ ν΅μ¬ μ리] μ€νλ§ μ»¨ν μ΄λμ μ€νλ§ λΉ (0) | 2022.11.14 |
[μ€νλ§ ν΅μ¬ μ리] μμ μ€κ³ λ° κ°μ²΄ μ§ν₯ μ리 μ μ© (0) | 2022.11.14 |