๐Ÿฏ[TIL] 250627-020

byoยท2025๋…„ 6์›” 27์ผ

๐Ÿ’ซ Spring

โœ”๏ธ DI

โœ… Dependency injection
๊ฐ์ฒด๊ฐ€ ์ง์ ‘ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ์™ธ๋ถ€์—์„œ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›์•„ ์‚ฌ์šฉํ•œ๋‹ค.
์Šคํ”„๋ง์€ DI๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

โœ… ์˜์กด์„ฑ ์ฃผ์ž…์˜ 3๊ฐ€์ง€ ๋ฐฉ์‹

  • ์Šคํ”„๋ง์—์„œ @Autowired๋ฅผ ํ™œ์šฉํ•œ ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ์‹์€ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค:
  1. ์ƒ์„ฑ์ž ์ฃผ์ž… (Constructor Injection)
  2. ํ•„๋“œ ์ฃผ์ž… (Field Injection)
  3. ์ˆ˜์ •์ž ์ฃผ์ž… (Setter Injection)
  • ๊ฐ ๋ฐฉ์‹์€ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ์‹œ์ ๊ณผ ํ…Œ์ŠคํŠธ/์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์ฐจ์ด๋ฅผ ๊ฐ€์ง„๋‹ค.

โœ… @AutoWired
์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ผ ๋•Œ ๋นˆ์— ๋“ฑ๋กํ•  ์ƒ์„ฑ์ž๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋œ๋‹ค.

  1. ์ƒ์„ฑ์ž ์ฃผ์ž…
    ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์˜์กด์„ฑ์ด final๋กœ ์„ ์–ธ๋˜์–ด ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ˆœํ™˜ ์ฐธ์กฐ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ์ ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ€์žฅ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  2. ํ•„๋“œ ์ฃผ์ž…
    ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ, ํ•„๋“œ์— @Autowired ์–ด๋…ธํ…Œ์ด์…˜๋งŒ ๋ถ™์ด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์™ธ๋ถ€์—์„œ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ , ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ด ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ˆ˜์ •์ž ์ฃผ์ž…
    Setter ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์˜์กด์„ฑ์„ ๋‚˜์ค‘์— ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, public ๋ฉ”์„œ๋“œ๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœํ•ด์•ผ ํ•˜๊ณ , ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
@Controller
public class DemoController {
    private final DemoService demoService;

    public DemoController(DemoService demoService) {
        this.demoService = demoService;
    }
}

@Controller
public class DemoController {
    @Autowired
    private DemoService demoService;
}

@Controller
public class DemoController {
    private DemoService demoService;

    @Autowired
    public void setDemoService(DemoService demoService) {
        this.demoService = demoService;
    }
}

๐Ÿค” ์™œ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ๊ถŒ์žฅํ• ๊นŒ?

  • ์Šคํ”„๋ง์—์„œ๋Š” ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ๊ฐ€์žฅ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์ ์— ์ˆœํ™˜ ์ฐธ์กฐ๋ฅผ ์กฐ๊ธฐ์— ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ถˆ๋ณ€์„ฑ ๋ณด์žฅ: ์˜์กด ๊ฐ์ฒด๋ฅผ final๋กœ ์„ ์–ธํ•˜์—ฌ ๋ณ€๊ฒฝ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ: ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ ์‹œ ์˜์กด ๊ฐ์ฒด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… ํ…Œ์ŠคํŠธ์—์„œ DI์˜ ์žฅ์ 
์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด DI ์ปจํ…Œ์ด๋„ˆ ์—†์ด๋„ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์˜์กด ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ฃผ์ž…ํ•˜์—ฌ POJO ๋ฐฉ์‹์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ…Œ์ŠคํŠธ์˜ ๊ฒฉ๋ฆฌ์„ฑ๊ณผ ์žฌํ˜„์„ฑ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.

public class DemoServiceTest {
    @Test
    public void testDoSomething() {
        DemoRepository repo = new DemoRepository();
        DemoService service = new DemoService(repo);
        service.doSomething();
    }
}

โ†”๏ธ ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ์‹ ๋น„๊ต

๋ฐฉ์‹์žฅ์ ๋‹จ์ 
์ƒ์„ฑ์ž ์ฃผ์ž…๋ถˆ๋ณ€์„ฑ ๋ณด์žฅ, ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€, ํ…Œ์ŠคํŠธ ์šฉ์ด์ฃผ์ž…๋ฐ›์„ ๊ฐ์ฒด๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ƒ์„ฑ์ž๊ฐ€ ๊ธธ์–ด์ง
ํ•„๋“œ ์ฃผ์ž…์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์ž‘์„ฑ ๊ฐ€๋Šฅํ…Œ์ŠคํŠธ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€, ์™ธ๋ถ€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€
์ˆ˜์ •์ž ์ฃผ์ž…๋Ÿฐํƒ€์ž„ ์‹œ ์˜์กด์„ฑ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅpublic setter ํ•„์š”๋กœ ์ธํ•ด ์บก์Аํ™” ์ €ํ•ด

beanFactory


โœ”๏ธ TO-DO-LIST ๋งŒ๋“ค๊ธฐ

https://github.com/juyoung797/ToDoListMVC.git

profile
๐Ÿ—‚๏ธ hamstern

0๊ฐœ์˜ ๋Œ“๊ธ€