Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

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

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable

Amenable's Blog

์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฐฉ๋ฒ•
๐Ÿ“‚ ์Šคํ”„๋ง/๊ธฐ๋ณธ ๊ฐœ๋…

์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฐฉ๋ฒ•

2023. 4. 6. 23:41

  ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์€ ํฌ๊ฒŒ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋ฐฉ๋ฒ•๊ณผ ํŠน์ง•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

  (๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž…์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์Šคํ”„๋ง ๋นˆ์ด์–ด์•ผ ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•˜์ž.)

 

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

2. ํŠน์ง•

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

(2) ๋ถˆ๋ณ€

  ์œ„์˜ ์˜ˆ์ œ์—์„œ MemberRepository์™€ DiscountPolicy๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค.

(3) ํ•„์ˆ˜

  ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

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

(4) ์ƒ์„ฑ์ž๊ฐ€ 1๊ฐœ๋ผ๋ฉด @Autowired๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

  2๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ์—๋Š” ์ƒ๋žต์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ์ƒ์„ฑ์ž๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๋ฉด ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ์ƒ์„ฑ์ž์— @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;
    }
}
@Component
public class OrderServiceImpl implements OrderService {
	
    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;
    
    // ์ƒ์„ฑ์ž1
    public OrderServiceImpl(){
    }
    
    // ์ƒ์„ฑ์ž2
    @Autowired
    public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
    	this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }
}

 

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

1. ๊ฐœ๋…

์ˆ˜์ •์ž ๋ฉ”์„œ๋“œ(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;
    }
}

2. ํŠน์ง•

(1) ์„ ํƒ

  ์ฃผ์ž…ํ•  ๋Œ€์ƒ์ด ์—†๋Š” ๊ฒฝ์šฐ(์Šคํ”„๋ง ๋นˆ์— ์ฃผ์ž…ํ•  ๋Œ€์ƒ์ด ์—†๋Š” ๊ฒฝ์šฐ) @Autowired๋ฅผ ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ @Autowired(required = false)๋ฅผ ์ด์šฉํ•˜๋ฉด ์„ ํƒ์ ์œผ๋กœ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

@Component
public class OrderServiceImpl implements OrderService {
	
    private MemberRepository memberRepository;
    private DiscountPolicy discountPolicy;
    
    @Autowired(required = false)
    public void setMemberRepository(MemberRepository memberRepository) {
    	this.memberRepository = memberRepository;
    }
    
    @Autowired
    public void setDiscountPolicy(DiscountPolicy discountPolicy) {
    	this.discountPolicy = discountPolicy;
    }
}

(2) ๋ณ€๊ฒฝ

  ์™ธ๋ถ€์—์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. ํ•„๋“œ ์ฃผ์ž… ๐Ÿฆ˜

1. ๊ฐœ๋…

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

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

2. ํŠน์ง•

(1) ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  IntelliJ์—์„œ 'Field injection is not recommended'๋ผ๊ณ  ํ‘œ์‹œ๋„ ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค...

(2) ํ…Œ์ŠคํŠธ์— ์–ด๋ ค์›€์ด ์žˆ๋‹ค.

  ํ•„๋“œ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ” ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. ํ…Œ์ŠคํŠธ์—์„œ @Autowired๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๊ณ  ์ธ์Šคํ„ด์Šค๋Š” ๋‹น์—ฐํžˆ null์ด ๋œ๋‹ค.

  ๊ตณ์ด ํ•ด๋‹น ๋ฐฉ๋ฒ•์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ ค๋ฉด setMemberRepository์™€ setDiscountPolicy์ฒ˜๋Ÿผ setter๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ๋Ÿฌ๋ฉด ๊ฒฐ๊ตญ ์œ„์—์„œ ์‚ดํŽด๋ณธ ์ˆ˜์ •์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋‚ซ๋‹ค.

 

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

1. ๊ฐœ๋…

  ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•(์•„๋ฌด๋Ÿฐ ๋ฉ”์„œ๋“œ์— @Autowired๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ)

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

2. ํŠน์ง•

(1) ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ•„๋“œ๋ฅผ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

  ํ•˜์ง€๋งŒ, ์ƒ์„ฑ์ž ์ฃผ์ž…๊ณผ ์ˆ˜์ •์ž ์ฃผ์ž…๋„ ์—ฌ๋Ÿฌ ํ•„๋“œ๋ฅผ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฐฉ์‹ ๋˜ํ•œ ์ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

5. ์ •๋ฆฌ ๐Ÿฆ™

 

๋ฐฉ๋ฒ• ์ƒ์„ฑ์ž ์ฃผ์ž… ์ˆ˜์ •์ž ์ฃผ์ž… (setter ์ฃผ์ž…) ํ•„๋“œ ์ฃผ์ž… ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž…
ํŠน์ง• ๋ถˆ๋ณ€
ํ•„์ˆ˜
์„ ํƒ ๊ฐ€๋Šฅ
๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
ํ…Œ์ŠคํŠธ์˜ ์–ด๋ ค์›€ ์ƒ์„ฑ์ž ์ฃผ์ž…๊ณผ ์ˆ˜์ •์ž ์ฃผ์ด๋ธก๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ

 

ํ•ด๋‹น ๊ธ€์€ ๊น€์˜ํ•œ ๋‹˜์˜ '์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ'์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

'๐Ÿ“‚ ์Šคํ”„๋ง > ๊ธฐ๋ณธ ๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

HTTP ์š”์ฒญ(ํ—ค๋”, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฉ”์‹œ์ง€) ์ฒ˜๋ฆฌ  (0) 2023.04.20
์Šคํ”„๋ง MVC  (0) 2023.04.19
์˜์กด์„ฑ ์ฃผ์ž… - DI(Dependency Injection)  (0) 2023.04.18
๋กœ๊น… (SLF4J, Logback)  (0) 2023.04.09
์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์„ ํƒํ•˜๋ผ!  (0) 2023.04.07
    '๐Ÿ“‚ ์Šคํ”„๋ง/๊ธฐ๋ณธ ๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ์Šคํ”„๋ง MVC
    • ์˜์กด์„ฑ ์ฃผ์ž… - DI(Dependency Injection)
    • ๋กœ๊น… (SLF4J, Logback)
    • ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์„ ํƒํ•˜๋ผ!
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

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