TIL - 2022

μŠ€ν”„λ§λΆ€νŠΈ - μ˜μ‘΄κ΄€κ³„ μ£Όμž…

λ°”λž„ 희 2022. 7. 7. 17:39

😡 μ˜μ‘΄κ΄€κ³„ μ£Όμž…μ˜ 방법 3κ°€μ§€

 

1. μƒμ„±μžλ‘œ μ£Όμž… πŸ‘πŸ»

 

@Autowired
public void OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }

 

μœ„μ™€ 같은 ν˜•νƒœκ°€ μƒμ„±μžλ‘œ μ˜μ‘΄κ΄€κ³„λ₯Ό μ£Όμž…ν•˜λŠ” 방식이닀.

μƒμ„±μžκ°€ ν•˜λ‚˜λΌλ©΄ Autowired μ–΄λ…Έν…Œμ΄μ…˜ μƒλž΅ κ°€λŠ₯ν•˜λ‹€.

 

2. setter μˆ˜μ •μžλ‘œ μ£Όμž… (ꢌμž₯ν•˜μ§€ μ•ŠμŒ) πŸ‘ŽπŸ»

 

    private MemberRepository memberRepository;
    private DiscountPolicy discountPolicy;

    @Autowired
    public void setMemberRepository(MemberRepository memberRepository){
        this.memberRepository = memberRepository;
    }

 

λ³€κ²½ κ°€λŠ₯성이 μžˆλŠ” μ˜μ‘΄κ΄€κ³„μ— μ‚¬μš©ν•œλ‹€.

μˆ˜μ •μž μ£Όμž…μ„ μ‚¬μš©ν•  μ‹œμ—λŠ” setXxx λ©”μ„œλ“œλ₯Ό public 으둜 열어두어야 ν•œλ‹€. λˆ„κ΅°κ°€κ°€ 변경해버릴 κ°€λŠ₯성이 λ†’λ‹€. λ˜ν•œ, λ³€κ²½ν•΄μ„œλŠ” μ•ˆλ˜λŠ” λ©”μ„œλ“œλ₯Ό λ³€κ²½ν•  수 μžˆλ„λ‘ μ—΄μ–΄λ‘λŠ” 것 μžμ²΄κ°€ λ¬Έμ œμ΄λ‹€. 

μžλ°” 빈 ν”„λ‘œνΌν‹°μ˜ κ·œμ•½μ„ λ”°λ₯΄λŠ” λ©”μ„œλ“œλͺ…을 μ‚¬μš©ν•œλ‹€.

μžλ°” 빈 ν”„λ‘œνΌν‹° κ·œμ•½μ΄λž€? μˆ˜μ •μžμΈ 경우 setXxx(λ³€μˆ˜λͺ…) 을 μ‚¬μš©ν•˜λŠ” 것

 

 

3. ν•„λ“œλ‘œ μ£Όμž… (ꢌμž₯ν•˜μ§€ μ•ŠμŒ) πŸ‘ŽπŸ»

 

@Component
public class OrderServiceImpl implements OrderService{

    @Autowired private final MemberRepository memberRepository;
    @Autowired private final DiscountPolicy discountPolicy;
}
@Test
void fieldInjectionTest(){
    OrderServiceImpl orderService = new OrderServiceImpl();
    orderService.createOrder();
        }

 

μ½”λ“œκ°€ κ°„κ²°ν•˜μ§€λ§Œ μ™ΈλΆ€μ—μ„œ 변경이 λΆˆκ°€λŠ₯ν•˜λ‹€.

μˆœμˆ˜ν•œ μžλ°”μ½”λ“œλ‘œ ν…ŒμŠ€νŠΈν•  경우, @Autowired κ°€ μ˜λ―Έκ°€ μ—†μ–΄μ§€λ―€λ‘œ NullPointException이 ν„°μ§ˆ 수 μžˆλ‹€.

μœ„μ™€ 같이 ν…ŒμŠ€νŠΈκ°€ λ˜μ—ˆμ„ λ•ŒλŠ” μˆœμˆ˜ν•œ μžλ°”μ½”λ“œμ΄λ―€λ‘œ @Autowired κ°€ μ˜λ―Έκ°€ μ—†κ²Œ 되고, memberRepository와 discountPolicyλŠ” μƒμ„±μžκ°€ μ—†κΈ° λ•Œλ¬Έμ— null이 λ˜μ–΄μ„œ 였λ₯˜κ°€ λ‚œλ‹€.

μ΄λŸ¬ν•œ 였λ₯˜κ°€ λ‚˜μ§€ μ•Šκ²Œ ν•˜κΈ° μœ„ν•΄μ„œλŠ” OrderServiceImpl 클래슀 내에 setterλ₯Ό λ”°λ‘œ λ§Œλ“€μ–΄ μ€˜μ•Ό ν•œλ‹€. 그럴 λ°”μ—λŠ” μƒμ„±μžλ‘œ μ£Όμž…ν•˜λŠ” 것이 κ°€μž₯ μ μ ˆν•˜λ‹€.

 

😾 κ·Έλƒ₯ μƒμ„±μžλ‘œ μ£Όμž…ν•΄λΌ! 😾

λŒ€λΆ€λΆ„μ˜ μ˜μ‘΄κ΄€κ³„λŠ” λ³€κ²½λ˜μ§€ μ•Šκ³ , λ³€κ²½λ˜μ§€ μ•ŠλŠ” 것이 λ°”λžŒμ§ν•˜λ‹€.

λ”°λΌμ„œ μˆ˜μ •μžλ₯Ό μ‚¬μš©ν•  μ΄μœ λŠ” μ—†κ³ , κ°„λ‹¨ν•˜μ§€λ§Œ λ”°λ‘œ μˆ˜μ •μžλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” ν•„λ“œ μ£Όμž… 방법 μ—­μ‹œλ„ μ¨μ„œ 쒋을 μ΄μœ κ°€ μ—†λ‹€.

λ˜ν•œ μƒμ„±μžλ₯Ό μ΄μš©ν•˜κ²Œ 되면, final ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. μ΄λŠ” μ™ΈλΆ€μ—μ„œ ν•¨λΆ€λ‘œ λ³€κ²½ν•  수 μ—†κ²Œ ν•˜κ³  μƒμ„±μžμ—μ„œλ§Œ 값을 λ³€κ²½ν•  수 있게 ν•œλ‹€. (set 의 κ²½μš°μ—λŠ” 객체가 μƒμ„±λœ λ‹€μŒμ— ν˜ΈμΆœλ˜λŠ” 것이기에 final ν‚€μ›Œλ“œλ₯Ό 뢙일 수 μ—†λ‹€)

결둠은, μ›¬λ§Œν•΄μ„œλŠ” μƒμ„±μž μ£Όμž…μ„ μ‚¬μš©ν•˜κ³  μˆ˜μ •μ΄λ‚˜ μ˜΅μ…˜μ΄ ν•„μš”ν•œ κ²½μš°μ— μˆ˜μ •μž μ£Όμž…μ„ μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λœλ‹€.