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

2023. 9. 12. 03:03ยท ๐’๐ฉ๐ซ๐ข๐ง๐ /๐๐š๐ฌ๐ข๐œ
๋ชฉ์ฐจ
  1. 1. ์ƒ์„ฑ์ž ์ฃผ์ž…
  2. 2. ์ˆ˜์ •์ž ์ฃผ์ž… (setter ์ฃผ์ž…)
  3. 3. ํ•„๋“œ ์ฃผ์ž…
  4. 4. ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž…
  5. 5. ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜์ž
  6. (1) ๊ฐ์ฒด ๋ถˆ๋ณ€์„ฑ ํ™•๋ณด
  7. (2) ํ…Œ์ŠคํŠธ ์‹œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ˆ„๋ฝ ๋ฐฉ์ง€
  8.  
  9. (3) final ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  10. 6. ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ๋‹˜์˜ ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ ๊ฐ•์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.


์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด๋ž€, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์ ์— ์™ธ๋ถ€์—์„œ ์‹ค์ œ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด์ „์— ์ œ์–ด์˜ ์—ญ์ „๊ณผ ํ•จ๊ป˜ ์•Œ์•„๋ณธ ์ ์ด ์žˆ์—ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ์ „๋‹ฌํ• ๊นŒ? ํฌ๊ฒŒ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

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

๋ง ๊ทธ๋Œ€๋กœ ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด์„œ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, @Autowired๊ฐ€ ๋ถ™์–ด์žˆ์œผ๋ฉด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ํƒ€์ž…์˜ ๋นˆ์„ ์ฐพ์•„ ์ƒ์„ฑ์ž์— ๋„ฃ์–ด์ค€๋‹ค.

 

@Component
public class OrderServiceImpl implements OrderService {

    private final DiscountPolicy discountPolicy;

    // ์ƒ์„ฑ์ž๊ฐ€ ๋”ฑ 1๊ฐœ๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ, @Autowired ์ƒ๋žต ๊ฐ€๋Šฅ
    @Autowired
    public OrderServiceImpl(DiscountPolicy discountPolicy) {
        this.discountPolicy = discountPolicy;
    }
}

 

๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋ ค๋ฉด, ๋จผ์ € ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. ์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ƒ์„ฑ์ž ๋ฟ์ด๊ณ , ์Šคํ”„๋ง ๋นˆ์€ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌ๋˜๊ธฐ์— ์ธ์Šคํ„ด์Šค๊ฐ€ 1๊ฐœ๋งŒ ์ƒ์„ฑ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒ์„ฑ์ž ์ฃผ์ž…์€ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์‹œ์ ์— ๋”ฑ 1๋ฒˆ๋งŒ ์ผ์–ด๋‚œ๋‹ค. ๊ทธ๋ž˜์„œ ์ฃผ๋กœ ํ•„์ˆ˜์ ์ด๊ณ  ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์˜์กด๊ด€๊ณ„์— ์‚ฌ์šฉํ•œ๋‹ค.

  • ํ•„์ˆ˜: ํ• ์ธ ์ •์ฑ…์„ ๊ฒฐ์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์ฃผ๋ฌธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํ• ์ธ ์ •์ฑ… ๊ตฌํ˜„์ฒด๋Š” ๋ฐ˜๋“œ์‹œ ์ฃผ์ž…ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • ๋ถˆ๋ณ€: ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ๊ฒฝ์šฐ์—๋Š” OrderService ๋นˆ์ด ์ƒ์„ฑ๋˜๋Š” ์ˆœ๊ฐ„ ํ• ์ธ ์ •์ฑ…์ด ๊ฒฐ์ •๋œ๋‹ค. ๋นˆ ์ƒ์„ฑ ์ดํ›„์—๋Š” ํ• ์ธ ์ •์ฑ… ๊ตฌํ˜„์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์†๋‹˜์ด ์–ธ์ œ ์ฃผ๋ฌธํ•˜๋“  ๋™์ผํ•œ ํ• ์ธ ์ •์ฑ…์„ ์ ์šฉ๋ฐ›๋Š”๋‹ค.

 


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

@Component
public class OrderServiceImpl implements OrderService {

    private final DiscountPolicy discountPolicy;

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

 

์ˆ˜์ •์ž ์ฃผ์ž…์€ ์ˆ˜์ •์ž๋ฅผ ํ†ตํ•ด ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ์„ ํƒ์˜ ์—ฌ์ง€, ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์˜์กด๊ด€๊ณ„์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค. ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ค‘ ์ฃผ์ž…๋ฐ›๋Š” ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์„ ๋•Œ๋Š” ์ˆ˜์ •์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค.
(ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๊ฒฝ์šฐ๋Š” ๋งค์šฐ ๋“œ๋ฌผ๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ์˜์กด๊ด€๊ณ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ๊นŒ์ง€ ๋ณ€ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.)

 

์ˆ˜์ •์ž๋Š” ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ๋‚œ ์ดํ›„์— ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜ํ•ด ํ˜ธ์ถœ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์™ธ๋ถ€์—์„œ setter๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก setter๋ฅผ public์œผ๋กœ ์—ด์–ด๋‘์–ด์•ผ ํ•œ๋‹ค.

 

๋งŒ์•ฝ ์ฃผ์ž… ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋นˆ์„ ์กฐํšŒํ•˜์—ฌ ์˜์กด๊ด€๊ณ„๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

        // OrderService ๋นˆ์„ ๊ฐ€์ ธ์˜ด
        OrderService orderService = context.getBean(OrderService.class);

        // ์ƒˆ๋กœ์šด DiscountPolicy ๊ฐ์ฒด ์ƒ์„ฑ
        DiscountPolicy newDiscountPolicy = new RateDiscountPolicy();

        // OrderService์˜ DiscountPolicy ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ˆ˜์ •์ž ํ˜ธ์ถœ
        orderService.setDiscountPolicy(newDiscountPolicy);
    }
}

 


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

@Component
public class OrderServiceImpl implements OrderService {

    @Autowired private DiscountPolicy discountPolicy;
}

 

ํ•„๋“œ ์ฃผ์ž…์€ ํ•„๋“œ์— ๋ฐ”๋กœ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์–ด ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

@Autowired๋Š” ์Šคํ”„๋ง์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๋ง์€ ๊ณง DI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ง์ด๊ธฐ๋„ ํ•˜๋‹ค. ํ•„๋“œ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•œ ์ƒํƒœ๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด, ์Šคํ”„๋ง์„ ์ „๋ถ€ ๋„์›Œ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 


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

@Component
public class OrderServiceImpl implements OrderService {

    private DiscountPolicy discountPolicy;

    @Autowired
    public void init(DiscountPolicy discountPolicy) {
        this.discountPolicy = discountPolicy;
    }
}

 

๊ทธ ์™ธ์— ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋„ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์‹ค์ƒ ์ˆ˜์ •์ž ์ฃผ์ž…๊ณผ ๋™์ผํ•˜๋ฉฐ, ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ•„๋“œ๋ฅผ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 


5. ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜์ž

์ง€๊ธˆ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ์ง€๋งŒ, ๊ทธ ์ค‘์—์„œ๋„ ๊ฐ€์žฅ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฐ”๋กœ ์ƒ์„ฑ์ž ์ฃผ์ž…์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์ด์œ  ๋•Œ๋ฌธ์ด๋‹ค.

 

(1) ๊ฐ์ฒด ๋ถˆ๋ณ€์„ฑ ํ™•๋ณด

๋Œ€๋ถ€๋ถ„์˜ ์˜์กด๊ด€๊ณ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ๋•Œ๊นŒ์ง€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
์ƒ์„ฑ์ž ์ฃผ์ž…์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋”ฑ 1๋ฒˆ๋งŒ ์‹คํ–‰๋˜๊ณ , ์ดํ›„๋กœ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ˆ˜์ •์ž ์ฃผ์ž…๊ณผ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž…์€ setter ๋ฉ”์„œ๋“œ๋ฅผ ์—ด์–ด๋‘๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์ž…๋ฐ›๋Š” ๊ฐ์ฒด๊ฐ€ ์ˆ˜์ •๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

 

(2) ํ…Œ์ŠคํŠธ ์‹œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ˆ„๋ฝ ๋ฐฉ์ง€

์ˆœ์ˆ˜ํ•œ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, ์ˆ˜์ •์ž ์˜์กด๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋ˆ„๋ฝ๋  ์ˆ˜ ์žˆ๋‹ค.

 

@Component
public class OrderServiceImpl implements OrderService {

    private final DiscountPolicy discountPolicy;

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

    public void createOrder(int price, Member member) {
        price = discountPolicy.calcurateDiscountPrice(price, member);
        ...
    }
}

 

์œ„์™€ ๊ฐ™์€ OrderServiceImpl ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค. ์ˆ˜์ •์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, createOrder()์€ discountPolicy๋กœ๋ถ€ํ„ฐ ํ• ์ธ๋œ ๊ธˆ์•ก์„ ๋ฐ›์•„์˜ค๊ณ  ์žˆ๋‹ค.

 

์ด์ œ ์ด ํด๋ž˜์Šค์˜ ์ฃผ๋ฌธ ์ƒ์„ฑ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.

 

class OrderServiceImplTest {

    @Test
    void createOrder() {
        OrderServiceImpl orderService = new OrderServiceImpl();
        orderService.createOrder(..
        ...

 

์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด NullPointerException์ด ๋ฐœ์ƒํ•œ๋‹ค. ์Šคํ”„๋ง์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•Œ์•„์„œ setter๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•ด ์ฃผ์—ˆ์ง€๋งŒ, ์Šคํ”„๋ง์ด ์—†๋Š” ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ” ์ฝ”๋“œ์—์„œ๋Š” setter๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ์žก๊ธฐ ๋งค์šฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

 

ํ•˜์ง€๋งŒ ์ˆ˜์ •์ž ์ฃผ์ž… ๋Œ€์‹  ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. OrderServiceImpl์˜ ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ IDE๊ฐ€ ์–ด๋–ค ๊ฐ’์ด ๋ˆ„๋ฝ๋˜์—ˆ๋Š”์ง€ ์นœ์ ˆํ•˜๊ฒŒ ์•Œ๋ ค์ฃผ๊ธฐ๊นŒ์ง€ ํ•œ๋‹ค.

๐Ÿ’ก ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ด์œ ?
ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ํ…Œ์ŠคํŠธ์˜ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋„์šธ ํ•„์š”๊ฐ€ ์—†์–ด ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์†๋„๊ฐ€ ํ–ฅ์ƒ๋œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์˜์กด๊ด€๊ณ„๋กœ ์—ฎ์ธ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ๊ป˜ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

(3) final ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์ฃผ์ž… ๋ฐฉ๋ฒ•์€ ํ•„๋“œ์— final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. final ์„ ์ดˆ๊ธฐํ™”ํ•˜๋ ค๋ฉด (1) ํ•„๋“œ์—์„œ ์ดˆ๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜, (2) ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์ œ์™ธํ•œ ์ฃผ์ž… ๋ฐฉ์‹์€ ์ƒ์„ฑ์ž ์ดํ›„์— ํ˜ธ์ถœ๋˜๋ฏ€๋กœ, ํ•„๋“œ์— final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (ํ•„๋“œ์—์„œ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ๋˜์ง€์•Š๋‚˜? ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค๋ฉด IoC์™€ DI๋ฅผ ๋ณต์Šตํ•˜๊ณ  ์˜ค์ž.)

 

์ด์ฒ˜๋Ÿผ final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์™€์•ผ ํ•  ๊ฐ’์ด ๋„˜์–ด์˜ค์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 


6. ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ทธ๋ž˜์„œ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ๊นŒ์ง„ ์•Œ์•˜๋Š”๋ฐ, ๋„ˆ๋ฌด ๊ท€์ฐฎ๋‹ค. final ํ‚ค์›Œ๋“œ๋„ ๋ถ™์—ฌ์ค˜์•ผ ํ•˜๊ณ , ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋„ฃ์–ด์ค˜์•ผ ํ•˜๊ณ ... ๊ทธ๋Ÿฐ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋ฐ”๋กœ ๋กฌ๋ณต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

๋กฌ๋ณต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์›ํ•œ๋‹ค. ์ƒ์„ฑ์ž ์ฃผ์ž…์— ์‚ฌ์šฉํ•  ์–ด๋…ธํ…Œ์ด์…˜์€ @RequiredArgsConstructor ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ, ์ปดํŒŒ์ผ ์‹œ์ ์— final ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค ํ•„๋“œ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ–๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค.

 

@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService {

    private final DiscountPolicy discountPolicy;

//    @Autowired
//    public OrderServiceImpl(DiscountPolicy discountPolicy) {
//        this.discountPolicy = discountPolicy;
//    }
}

 

์œ„์™€ ๊ฐ™์ด ์–ด๋…ธํ…Œ์ด์…˜ ํ•˜๋‚˜๋งŒ ๋ถ™์ด๋ฉด, ์•„๋ž˜์— ์ฃผ์„ ์ฒ˜๋ฆฌํ•œ ์ƒ์„ฑ์ž๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค. (์ฝ”๋“œ์—๋Š” ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์ง€๋งŒ, ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.) ์ด์ฒ˜๋Ÿผ ์ƒ์„ฑ์ž ์ฃผ์ž…๊ณผ ๋กฌ๋ณต์„ ํ•จ๊ป˜ ์ด์šฉํ•˜๋ฉด, ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก ๋กฌ๋ณต์˜ ๋Œ€ํ‘œ์ ์ธ ์–ด๋…ธํ…Œ์ด์…˜

  • @Getter: ํด๋ž˜์Šค ํ•„๋“œ์— ๋Œ€ํ•ด getter ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ
  • @Setter: ํด๋ž˜์Šค ํ•„๋“œ์— ๋Œ€ํ•ด setter ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ
  • @ToString: ํด๋ž˜์Šค ํ•„๋“œ์— ๋Œ€ํ•ด toString() ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ
  • @NoArgsConstructor: ๋งค๊ฐœ๋ณ€์ˆ˜ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ
  • @AllArgsConstructor: ๋ชจ๋“  ํ•„๋“œ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ–๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ

'๐’๐ฉ๐ซ๐ข๐ง๐  > ๐๐š๐ฌ๐ข๐œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋นˆ ์Šค์ฝ”ํ”„๋ž€?  (0) 2023.09.12
๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ  (0) 2023.09.12
์ปดํฌ๋„ŒํŠธ ์Šค์บ”  (0) 2023.09.02
์Šคํ”„๋ง์—์„œ์˜ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด  (0) 2023.09.02
์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ž€?  (0) 2023.09.02
  1. 1. ์ƒ์„ฑ์ž ์ฃผ์ž…
  2. 2. ์ˆ˜์ •์ž ์ฃผ์ž… (setter ์ฃผ์ž…)
  3. 3. ํ•„๋“œ ์ฃผ์ž…
  4. 4. ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž…
  5. 5. ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜์ž
  6. (1) ๊ฐ์ฒด ๋ถˆ๋ณ€์„ฑ ํ™•๋ณด
  7. (2) ํ…Œ์ŠคํŠธ ์‹œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ˆ„๋ฝ ๋ฐฉ์ง€
  8.  
  9. (3) final ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  10. 6. ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
'๐’๐ฉ๐ซ๐ข๐ง๐ /๐๐š๐ฌ๐ข๐œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋นˆ ์Šค์ฝ”ํ”„๋ž€?
  • ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ
  • ์ปดํฌ๋„ŒํŠธ ์Šค์บ”
  • ์Šคํ”„๋ง์—์„œ์˜ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด
gorapaduckoo
gorapaduckoo
gorapaduckoo
์ง„ํ™”์˜ ๋Œ
gorapaduckoo
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • ๐€๐ฅ๐ ๐จ๐ซ๐ข๐ญ๐ก๐ฆ
    • ๐‚๐’
      • ๐‰๐š๐ฏ๐š
      • ๐ƒ๐š๐ญ๐š๐›๐š๐ฌ๐ž
      • ๐๐ž๐ญ๐ฐ๐จ๐ซ๐ค
      • ๐„๐ญ๐œ.
    • ๐’๐ฉ๐ซ๐ข๐ง๐ 
      • ๐๐š๐ฌ๐ข๐œ
      • ๐Œ๐•๐‚ (๐Ÿ)
      • ๐’๐ž๐œ๐ฎ๐ซ๐ข๐ญ๐ฒ
    • ๐๐ซ๐จ๐ฃ๐ž๐œ๐ญ๐ฌ
      • ๐‘๐ž๐œ๐จ๐ฎ๐ซ๐ญ๐š
      • ๐’๐ข๐ฅ๐ญ๐š๐ซ๐š๐ž
    • ๐†๐ข๐ญ
    • ๐‘๐ž๐ฏ๐ข๐ž๐ฐ
    • ๐’๐ญ๐ฎ๐๐ฒ

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

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

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

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • mvc ํŒจํ„ด
  • ๋„คํŠธ์›Œํฌ
  • ๋น„ํŠธ๋งˆ์Šคํ‚น
  • DFS
  • web
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • Union-FInd
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • Spring ๊ธฐ๋ณธํŽธ
  • http
  • DI
  • ๋ฐฑ์ค€
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • BOJ
  • IOC
  • ํŠธ๋ฆฌ
  • aop
  • OOP
  • spring mvc
  • ์—๋“œ๋ชฌ๋“œ-์นดํ”„
  • ๋ฝ
  • CS
  • dp
  • ๊ตฌํ˜„
  • ๋ธŒ๋ฃจํŠธํฌ์Šค
  • spring

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.2
gorapaduckoo
์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฐฉ๋ฒ•
์ƒ๋‹จ์œผ๋กœ

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

๋‹จ์ถ•ํ‚ค

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

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

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

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

๋ชจ๋“  ์˜์—ญ

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

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