JAVA Spring IOC , DI

윤슬·2025년 9월 22일

IOC (Inversion Of Control, 제어의 역전)

  1. 정의 : 객체의 생성 및 관리의 제어권을 개발자가 아닌 스프링 프레임워크가 담당
  2. 스프링에서는 컨테이너가 이를 담당
  3. 목적 : 효율적이고 규칙적인 객체를 관리/사용하기 위해 스프링이 대신 처리
    • 이유: 여러 사람이 비규칙적으로 객체를 사용하면 중복 객체 혹은 객체 충돌 발생 가능
  4. 주요 어노테이션
    • @Component : 컨테이너(스프링 메모리/저장소)에 클래스의 빈(bean) 정보 등록
      • @Component 내장 주요 어노테이션
        • @Controller, @RestController, @Service, @Repository, @Configuration 등
        • 각기 다른 기능과 @Component가 내장됨
        • 주로 MVC 패턴 빈 등록, 즉 MVC 패턴은 IOC 기반이며 스프링 필수 패턴

DI (Dependency Injection, 의존성 주입)

  1. 정의 : 객체를 직접 생성하지 않고 외부(스프링 컨테이너)로부터 주입받는 방법

  2. 목적 : 객체 간 결합도를 낮추고 유지보수성을 향상

  3. 주요 어노테이션

    • @Autowired : 스프링 컨테이너에 등록된 빈(객체)을 꺼내옴
  4. 사용법

    1. 멤버변수(필드)에 주입

      @Autowired
      클래스명 변수명;
    2. 생성자에 주입 (권장, final 사용)

      final 클래스명 변수명;
      
      @Autowired
      public 클래스명(클래스명 매개변수명) {
          this.변수명 = 매개변수명;
      }
    3. Setter를 이용한 주입

      클래스명 변수명;
      
      @Autowired
      public void set변수명(클래스명 매개변수명) {
          this.변수명 = 매개변수명;
      }
  • 주의 : DTO는 싱글톤이 없으므로 IOC/DI와 상관없음, IOC/DI는 싱글톤 객체 관리에 유용

IOC 구조 예시

            [IOC]

--스프링 컨테이너--
| |
| |
| boardControl | ----- @Autowired -------> boardControl 객체 꺼내기
| |
| |

profile
우상향그래프

0개의 댓글