[Spring Framework] IoC & DI ๊ฐœ๋… ์ดํ•ด ํ•˜๊ธฐ

2024. 10. 20. 14:32ยท๐Ÿ› ๏ธBackend/๐ŸŒณSpring

 

1. IoC (Inversion of Control)

Inversion of Control์˜ ๋œป์€ "์ œ์–ด์˜ ์—ญ์ „"์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์ œ์–ด๋Š”, ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ฐพ๋Š” ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜ Spring Framework์˜ IoC ์ปจํ…Œ์ด๋„ˆ ์—๊ฒŒ ์ œ์–ด์˜ ๊ถŒํ•œ์„ ๋„˜๊น€์œผ๋กœ์จ, IoC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์•Œ์•„์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์•Œ์•„์„œ ์ฃผ์ž…์„ ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

- ๊ฐ์ฒด์˜ ์ œ์–ด๋ฅผ ์™ธ๋ถ€์—์„œ ๋‹ด๋‹นํ•˜๊ฒŒ ํ•œ๋‹ค๋Š” ํญ ๋„“์€ ๊ฐœ๋…

- IoC Container์—๊ฒŒ ์ œ์–ด ๊ถŒํ•œ์„ ๋„˜๊ธด๋‹ค๋Š” ๊ฐœ๋…

 

* IoC Container : Spring Framework๊ฐ€ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์ž๋™์„ ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ "Bean"๋“ค์˜ ์ง‘ํ•ฉ๊ณผ "Bean"๋“ค์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ณต๊ฐ„์ด๋‹ค.

* Bean : Spring Framework๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋“ค์„ "Bean"์ด๋ผ๊ณ  ํ•œ๋‹ค. ( ์ž์„ธํ•œ ์„ค๋ช…์€ ์ถ”ํ›„์— ๋‹ค๋ฃจ๊ฒ ๋‹ค. )

 

 

2. DI (Dependency Injection)

Dependency Injecton์˜ ๋œป์€ "์˜์กด์„ฑ ์ฃผ์ž…"์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” "์˜์กด"์ด๋ž€, ๊ฐ์ฒด A๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด B๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐํ•  ๋•Œ, A๋Š” B์— "์˜์กด"ํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์„ "์˜์กด ๊ด€๊ณ„" ๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

public class A {
    private B b;
    
    public A() {
    	this.b = new B(); // ์ƒ์„ฑ์„ ํ†ตํ•œ ์˜์กด๊ด€๊ณ„
        // A๋Š” B๋ฅผ ์˜์กด ํ•˜๊ณ  ์žˆ์Œ. ๋‘˜์€ ์˜์กด ๊ด€๊ณ„์ด๋‹ค.
    }
}

"์˜์กด"์ด๋ž€๊ฑธ ์ดํ•ด๋ฅผ ํ–ˆ๋‹ค๋ฉด, ์ด์ œ "์˜์กด์„ฑ ์ฃผ์ž…(DI)"์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

"์˜์กด์„ฑ ์ฃผ์ž…"์€ ๋ง๊ทธ๋Œ€๋กœ "์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๋ฐฉ์‹"์ด๋‹ค.

public class A {
    private B b;
    
    public A(B b) {
    	this.b = b; // ์ฐธ์กฐ๋ฅผ ํ†ตํ•œ ์˜์กด ๊ด€๊ณ„
    }
}

 

 

3. DI (Dependency Injection) ์žฅ์ 

1. ๊ฒฐํ•ฉ๋„ ๊ฐ์†Œ

A ๊ฐ์ฒด์™€ B ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค. A ๊ฐ์ฒด๊ฐ€ B ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, B ๊ฐ์ฒด๊ฐ€ ๋งŒ์•ฝ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒํด๋ž˜์Šค์ผ ๊ฒฝ์šฐ ๊ตฌํ˜„์ฒด๊ฐ€ ๋ฐ”๋€Œ๋”๋ผ๋„ A ๊ฐ์ฒด์˜ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์ด ์—†์–ด์ง„๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ( ์œ ์ง€ ๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ )

 

2. ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ

์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›๋Š” ์˜์กด์„ฑ์„ ํ•„์š”์— ๋”ฐ๋ผ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ตฌํ˜„์ฒด๋ฅผ ๋ฐ”๊ฟˆ์œผ๋กœ์จ, ๊ธฐ์กด ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์—†์ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” "์œ ์—ฐ์„ฑ"๊ณผ "ํ™•์žฅ์„ฑ"์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

 

3. ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๊ฐ€

์—ฌ๋Ÿฌ ํด๋ž˜์Šค๊ฐ€ ๋™์ผํ•œ ์˜์กด์„ฑ์„ ํ•„์š”๋กœ ํ•˜๋ฉด, ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ†ตํ•ด ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์—์„œ ์žฌ์‚ฌ์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ , ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ฒฐ๋ก 

IoC๋Š” ์™ธ๋ถ€์— ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์ฃผ์ž…์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ๋งก๊ธด๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ , DI๋Š” IoC์˜ ๊ฐ์ฒด ์ฃผ์ž…์„ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•œ ๊ฐœ๋…์ด๋‹ค.

 

 

์ฐธ์กฐ ( Spring ๊ณต์‹ ๋ฌธ์„œ )

https://docs.spring.io/spring-framework/reference/core/beans/introduction.html

 

Introduction to the Spring IoC Container and Beans :: Spring Framework

This chapter covers the Spring Framework implementation of the Inversion of Control (IoC) principle. Dependency injection (DI) is a specialized form of IoC, whereby objects define their dependencies (that is, the other objects they work with) only through

docs.spring.io

 

'๐Ÿ› ๏ธBackend > ๐ŸŒณSpring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring Data JPA] JPA Entity ํด๋ž˜์Šค์— ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•œ ์ด์œ   (0) 2024.12.30
[Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ ๋™์ž‘ ์›๋ฆฌ  (0) 2024.11.14
[Spring MVC] ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•œ ๋™์ž‘ ์›๋ฆฌ  (1) 2024.11.05
[Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ & Bean ๊ฐœ๋… ์ดํ•ด ํ•˜๊ธฐ  (1) 2024.10.21
[Spring Framework] Spring & Spring Framework ์ฐจ์ด  (0) 2024.10.19
'๐Ÿ› ๏ธBackend/๐ŸŒณSpring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ ๋™์ž‘ ์›๋ฆฌ
  • [Spring MVC] ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•œ ๋™์ž‘ ์›๋ฆฌ
  • [Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ & Bean ๊ฐœ๋… ์ดํ•ด ํ•˜๊ธฐ
  • [Spring Framework] Spring & Spring Framework ์ฐจ์ด
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (156) N
      • ๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต (26)
        • ๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™๊ณผ (1)
        • ๐ŸŒ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ… (11)
        • โš™๏ธ์ปดํ“จํ„ฐ์˜ ์ดํ•ด (11)
        • ๐Ÿ›๏ธ์„ธ๊ณ„์˜์ •์น˜์™€๊ฒฝ์ œ (3)
      • ๐Ÿ› ๏ธBackend (53) N
        • ๐Ÿ“š๋ฐฑ์—”๋“œ ๊ณต๋ถ€ (4)
        • โ˜•Java (22)
        • ๐ŸŒณSpring (11)
        • โšกPython (13)
        • JavaScript (1) N
        • ๐Ÿ›ข๏ธDatabase (0)
        • Algorithm Problem Solving (2)
      • ๐ŸŒ Network (7)
        • ๐Ÿ“œHTTP (7)
      • ๐Ÿš€DevOps (1)
      • Data Structure (1)
      • โ›บ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ (65)
      • ์ •๋ณด (1)
      • ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์œ ๋น„์ฟผํ„ฐ์Šค
    ์Šคํ”„๋ง
    ์ž๋ฐ”
    ์ปดํ“จํ„ฐ์˜ ์ดํ•ด
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…๊ฐœ๋ก 
    ํŒŒ์ด์ฌ
    ์ปดํŒŒ์ผ๋Ÿฌ
    ๋ฐฉํ†ต๋Œ€
    ๋ฐฉ์†ก๋Œ€
    Java
    ํด๋ž˜์Šค
    spring
    ์„ธ๊ณ„ํ™”
    Python
    ํด๋ผ์šฐ๋“œ
    ์ž…์ถœ๋ ฅ
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…
    ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต
    Spring Framework
    ๋‹คํ˜•์„ฑ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
junbin2
[Spring Framework] IoC & DI ๊ฐœ๋… ์ดํ•ด ํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

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