์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

Spring ํ•ต์‹ฌ์›๋ฆฌ-๊ธฐ๋ณธ [์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•]

2021. 7. 15. 18:26
๋ชฉ์ฐจ
  1. [ ์ƒ์„ฑ์ž ์ฃผ์ž… ]
  2.  
  3. [ ์ˆ˜์ •์ž ์ฃผ์ž… (setter ์ฃผ์ž…) ]
  4. [ ํ•„๋“œ ์ฃผ์ž… ]
  5. [ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž… ]

์˜์กด๊ด€๊ณ„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • ์ƒ์„ฑ์ž ์ฃผ์ž…
  • ์ˆ˜์ •์ž ์ฃผ์ž… ( setter ์ฃผ์ž… )
  • ํ•„๋“œ ์ฃผ์ž…
  • ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž…

[ ์ƒ์„ฑ์ž ์ฃผ์ž… ]

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

  • ์ƒ์„ฑ์ž ํ˜ธ์ถœ์‹œ์ ์— 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;
    }
 }

์ด๋ ‡๊ฒŒ @Component ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค์— ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ ,  @Autowired ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•ด์ค€๋‹ค. 

ํ•˜์ง€๋งŒ, ์ƒ์„ฑ์ž๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ์—๋Š” @Autowired ์• ๋…ธํ…Œ์ด์…˜์„ ์ƒ๋žตํ•ด๋„ ๊ดœ์ฐฎ๋‹ค. (์ž๋™์œผ๋กœ @Autowired๊ฐ€ ์ ์šฉ๋œ๋‹ค.)

 

[ ์ˆ˜์ •์ž ์ฃผ์ž… (setter ์ฃผ์ž…) ]

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

  • ์„ ํƒ, ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์˜์กด ๊ด€๊ณ„ ์‚ฌ์šฉ
@Component
public class OrderServiceImpl implements OrderService {

    private MemberRepository memberRepository;
    private DiscountPolicy discountPolicy;

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

์ด๋Ÿฐ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ•œ๋‹ค.

๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ๋•Œ๋ฌธ์— final์„ ์ง€์›Œ์ค€๋‹ค. (๋งž๋‚˜..?) 

๊ทธ๋‹ค์Œ set~~์„ ์ž‘์„ฑํ•ด์„œ, ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•ด์ฃผ๊ณ , @Autowired์„ ์‚ฌ์šฉํ•ด์„œ ์™„์„ฑํ•ด์ค€๋‹ค.

์—ฌ๊ธฐ์„œ๋Š”  @Autowired์„ ์ƒ๋žตํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

 

์„ ํƒ์ ์œผ๋กœ ์ฃผ์ž…ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

@Autowired(required = false)
    public void setDiscountPolicy(DiscountPolicy discountPolicy) {
        this.discountPolicy = discountPolicy;
    }

 

๐Ÿ‘‰ ์ƒ์„ฑ์ž ์ฃผ์ž…๋„ ์•„๋‹Œ๋ฐ ์ƒ์„ฑ์ž๋ฅผ ์™œ ์ž‘์„ฑํ–ˆ์„๊นŒ?

์ž๋ฐ”๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ•˜๋ ค๋ฉด ๋ฌด์กฐ๊ฑด ์ƒ์„ฑ์ž๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. @Autowired์„ ์“ฐ์ง€ ์•Š์•„๋„ ์ƒ์„ฑ์ž๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด, ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์šฐ์„ ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์ƒ์„ฑ์ž๋กœ ์ธํ•ด ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋จผ์ € ๋˜๊ณ , ๊ทธ ๋‹ค์Œ์— setter์ฃผ์ž…์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

 

[ ํ•„๋“œ ์ฃผ์ž… ]

ํ•„๋“œ์— ๋ฐ”๋กœ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

@Autowired private MemberRepository memberRepository;
@Autowired private DiscountPolicy discountPolicy;

์ด๋Ÿฐ์‹์œผ๋กœ ํ•„๋“œ์—  @Autowired์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ๋‹ค.

 

  • ํ•„๋“œ์ฃผ์ž…์€ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ํž˜๋“ค๋‹ค.
  • DIํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์—†์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ๋ชปํ•˜์ง€ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํŽธ์ด ์ข‹๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผํ•˜๋ ค๋ฉด ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด์ค˜์•ผ ํ•œ๋‹ค.

    @Test
    void fieldInjectionTest(){
        OrderServiceImpl orderService = new OrderServiceImpl();

        orderService.setMemberRepository(new MemoryMemberRepository());
        orderService.setDiscountPolicy(new FixDiscountPolicy());

        orderService.createOrder(1L, "itemA", 10000);
    }

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ๋ณต์žกํ•ด์ง€๊ณ , ์ž๋ฐ” ์ฝ”๋“œ์—๋„ set๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•œ๋‹ค.

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

    public void setDiscountPolicy(DiscountPolicy discountPolicy) {
        this.discountPolicy = discountPolicy;
    }

๊ตณ์ด ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ฐจ๋ผ๋ฆฌ setter ์ฃผ์ž…์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค.

 

[ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž… ]

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

  • ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ•„๋“œ๋ฅผ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
@Component
public class OrderServiceImpl implements OrderService {

    private MemberRepository memberRepository;
    private DiscountPolicy discountPolicy; // DIP์ง€ํ‚ค๊ณ  ์žˆ์Œ, ์ˆœ์ „ํžˆ ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กด

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

์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž…์€ ์ˆ˜์ •์ž ์ฃผ์ž…๊ณผ ๋น„์Šทํ•œ ์›๋ฆฌ๋กœ ๋™์ž‘๋œ๋‹ค.

 

 


์ถœ์ฒ˜ : 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

  1. [ ์ƒ์„ฑ์ž ์ฃผ์ž… ]
  2.  
  3. [ ์ˆ˜์ •์ž ์ฃผ์ž… (setter ์ฃผ์ž…) ]
  4. [ ํ•„๋“œ ์ฃผ์ž… ]
  5. [ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž… ]
DAHLIA CHOI
DAHLIA CHOI
DAHLIA CHOI
๐ŸŒผ dali's log ๐ŸŒผ
DAHLIA CHOI
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (103)
    • Spring (42)
    • JAVA & OOP (8)
    • AWS (2)
    • DevOps (5)
    • Network (7)
    • DB (5)
    • Algorithm (9)
      • BOJ (6)
      • PROGRAMMERS (2)
      • LEETCODE (0)
    • Books (5)
    • ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… (5)
    • ํšŒ๊ณ  (0)
    • ๊ธฐํƒ€ (5)
    • FRENCH (1)
    • ํ•„์‚ฌ (2)
    • ๊ฒฝํ—˜ (5)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
DAHLIA CHOI
Spring ํ•ต์‹ฌ์›๋ฆฌ-๊ธฐ๋ณธ [์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•]
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.