๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/Spring

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… - ๋‹ค์–‘ํ•œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฐฉ๋ฒ•)

by YeonBu 2023. 12. 12.
728x90

/* ์ด ๊ธ€์€ ๊น€์˜ํ•œ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋ณด๊ณ  ์ •๋ฆฌํ•˜๋ ค๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

   ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์˜ฌ๋ฆฌ๋Š” ๊ธ€์ด๋ฏ€๋กœ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์ฝ”๋“œ๋Š” ์ƒ๋žต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. */

 

 

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์Šคํ”„๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์„ฑ์žฅํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์„ธ์š”! ๐Ÿ“ข

 

 

 

 

 

๋‹ค์–‘ํ•œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…๋ฐฉ๋ฒ•

 

 

 

1. ์ƒ์„ฑ์ž ์ฃผ์ž…

 

โœ” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž… ๋ฐ›๋Š” ๋ฐฉ๋ฒ•.

โœ” ์ƒ์„ฑ์ž ํ˜ธ์ถœ์‹œ์ ์— ๋”ฑ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค.

โœ” `๋ถˆ๋ณ€, ํ•„์ˆ˜` ์˜์กด๊ด€๊ณ„์— ์‚ฌ์šฉ

 

OrderServiceImpl

@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;
    }

}

 

โ—พ ๋ถˆ๋ณ€ : ์œ„ ์ฝ”๋“œ์—์„œ `memberRepository`์™€ `discountPolicy`๋Š” final ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค. ์ด๋Š” ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

 

โ—พ ํ•„์ˆ˜ : ์œ„ ์ฝ”๋“œ์—์„œ ๊ฐ์ฒด๋ฅผ final๋กœ ์„ ์–ธํ–ˆ๋‹ค. ๊ทธ ๋œป์€ ์–˜๋Š” ๋ฌด์กฐ๊ฑด ๊ฐ’์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋ฉฐ ์ƒ์„ฑ์ž๋กœ ๊ฐ’์„ ํ•„์ˆ˜๋กœ ์ฃผ์ž…ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

 

โ—พ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ! ์ƒ์„ฑ์ž๊ฐ€ ๋”ฑ 1๊ฐœ๋งŒ ์žˆ์œผ๋ฉด @Autowired๋ฅผ ์ƒ๋žตํ•ด๋„ ๋œ๋‹ค(์š”์ฆ˜์—” ์ด๋ ‡๊ฒŒ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜์‹ฌ)

 

 

 

 

2. ์ˆ˜์ •์ž ์ฃผ์ž…(setter ์ฃผ์ž…)

 

โœ” setter๋ผ ๋ถˆ๋ฆฌ๋Š” ํ•„๋“œ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ˆ˜์ •์ž ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…

โœ” ์„ ํƒ, ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์˜์กด๊ด€๊ณ„์— ์‚ฌ์šฉ

โœ” ์ž๋ฐ”๋นˆ ํ”„๋กœํผํ‹ฐ ๊ทœ์•ฝ์˜ ์ˆ˜์ •์ž ๋ฉ”์„œ๋“œ ๋ฐฉ์‹์„ ์‚ฌ์šฉ

 

OrderServiceImpl

@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;
    }
    
}

 

โ—พ @Autowired์˜ ๊ธฐ๋ณธ ๋™์ž‘์€ ์ฃผ์ž…ํ•  ๋Œ€์ƒ์ด ์—†์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋Œ€์ƒ์ด ์—†์–ด๋„ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด @Autowired(required = false)๋กœ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

 

3. ํ•„๋“œ ์ฃผ์ž…

 

โœ” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ํ•„๋“œ์— ๋ฐ”๋กœ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•

โœ” ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์„œ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ ํ˜นํ•˜์ง€๋งŒ ์™ธ๋ถ€์—์„œ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์„œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ํž˜๋“ฆ

โœ” DI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์—†์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ํ•  ์ˆ˜ ์—†๋‹ค

 โž” ๊ฒฐ๋ก  : ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž

 

OrderServiceImpl

@Component
public class OrderServiceImpl implements OrderService{
    
    @Autowired
    private  MemberRepository memberRepository;
    @Autowired
    private  DiscountPolicy discountPolicy;
    
}

 

โ—พ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹ค์ œ ์ฝ”๋“œ์™€ ๊ด€๊ณ„์—†๋Š” ํ…Œ์ŠคํŠธ์ฝ”๋“œ, ์Šคํ”„๋ง ์„ค์ •์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” @Counfiguration ๊ฐ™์€ ๊ณณ์—์„œ๋งŒ ํŠน๋ณ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ

 

 

 

 

4. ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž…

 

โœ” ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ฃผ์ž… ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

โœ” ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ•„๋“œ๋ฅผ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž˜ ์‚ฌ์šฉํ•˜์ง„ ์•Š์Œ

 

OrderServiceImpl

@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;
    }
    
}

 

โ—พ ๋‹น์—ฐํ•œ ์ด์•ผ๊ธฐ์ง€๋งŒ ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž…์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์Šคํ”„๋ง ๋นˆ์ด์–ด์•ผ ๋™์ž‘ํ•œ๋‹ค. ์Šคํ”„๋ง ๋นˆ์ด ์•„๋‹Œ Member ๊ฐ™์€ ํด๋ž˜์Šค์—์„œ @Autowired ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•ด๋„ ์•„๋ฌด ๊ธฐ๋Šฅ๋„ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

 

 

๋ฐ˜์‘ํ˜•