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

2024. 10. 20. 14:32ยท๐ŸŒณSpring/๐ŸŒฑSpring Framework

 

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

 

'๐ŸŒณSpring > ๐ŸŒฑSpring Framework' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring Framework] @RestController & @Controller ์ฐจ์ด  (0) 2025.05.12
[Spring Framework] DispatcherServle  (0) 2025.05.12
[Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ ๋™์ž‘ ์›๋ฆฌ  (0) 2024.11.14
[Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ & Bean ๊ฐœ๋… ์ดํ•ด ํ•˜๊ธฐ  (1) 2024.10.21
[Spring Framework] Spring & Spring Framework ์ฐจ์ด  (0) 2024.10.19
'๐ŸŒณSpring/๐ŸŒฑSpring Framework' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring Framework] DispatcherServle
  • [Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ ๋™์ž‘ ์›๋ฆฌ
  • [Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ & Bean ๊ฐœ๋… ์ดํ•ด ํ•˜๊ธฐ
  • [Spring Framework] Spring & Spring Framework ์ฐจ์ด
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (151)
      • ๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต (26)
        • ๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™๊ณผ (1)
        • ๐ŸŒ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ… (11)
        • โš™๏ธ์ปดํ“จํ„ฐ์˜ ์ดํ•ด (11)
        • ๐Ÿ›๏ธ์„ธ๊ณ„์˜์ •์น˜์™€๊ฒฝ์ œ (3)
      • ๐Ÿ“šComputer Science (0)
      • ๐Ÿ› ๏ธBackend (2)
      • โ˜•Java (20)
        • ๐Ÿ“Java Programming (19)
        • ๐ŸงฉJava Design Pattern (1)
      • ๐ŸŒณSpring (9)
        • ๐ŸŒฑSpring Framework (6)
        • ๐ŸŒฑSpring Security (1)
      • โšกPython (13)
      • ๐Ÿ›ข๏ธDatabase (0)
      • ๐ŸŒฟGitHub (1)
      • ๐ŸŒ Network (7)
        • ๐Ÿ“œHTTP (7)
      • ๐Ÿš€DevOps (1)
      • Algorithm Problem Solving (2)
      • Data Structure (1)
      • JavaScript (1)
      • โ›บ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ (65)
      • ์žก๋‹ด (1)
      • ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

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

  • ์ตœ๊ทผ ๊ธ€

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

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