[Spring] IoC & DI

IoC (Inversion of Control)

  • IoC(제어의 역전)이란 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미
  • 컴포넌트 간의 의존관계 결정(Component dependency resolution), 설정(configuration) 및 생명 주기(lifecycle)를 해결하기 위한 디자인 패턴(Design Pattern)

 

DI (Dependency Injection)

  • 각 클래스간의 의존관계를 빈 설정 (Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해 주는 것
  • 개발자들은 빈 설정 파일에서 의존관계가 필요하다는 정보를 추가하면 된다.
  • 객체 레퍼런스를 컨테이너로부터 주입받아서 실행 시에 동적으로 의존관계가 생성된다.
  • 컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계 주입
  • 장점: 코드가 단순해지고 컴포넌트 간의 결합도가 느슨해진다.

 

DI 유형

  • Setter Injection
    • 의존성을 입력 받는 setter 메서드를 만들고 이를 통해 의존성 주입
  • Construction Injection
    • 필요한 의존성을 포함하는 클래스의 생성자를 만들고 이를 통해 의존성 주입
  • Method Injection
    • 의존성을 입력받는 일반 메소드를 만들고 이를 통해 의존성 주입

 

 

DI를 이용한 클래스 호출 방식

클래스_호출_방식

  • Setter Injection

setter_injection

  • Constructor Injection

constructor_injection

 

 

Spring 컨테이너

  • 스프링 컨테이너가 관리하는 객체를 빈(Bean)이라 하고, 이 빈들을 관리한다는 의미로 컨테이너를 빈 팩토리(BeanFactory)라고 부른다.
  • 객체의 생성과 객체 사이의 런타임 관계를 DI관점에서 볼 때 컨테이너를 BeanFactory라고 한다.
  • BeanFactory에 여러 가지 컨테이너 기능을 확장하여 ApplicationContext라고 부른다.

 

 

BeanFactory vs Application Context

  • BeanFactory
    • Bean을 등록, 생성, 조회, 반환 관리
    • 보통은 BeanFactory를 바로 사용하지 않고, 이를 확장한 ApplicationContext 사용
    • getBean() 메서드가 정의되어 있음
  • Application Context
    • Bean을 등록, 생성, 조회, 반환 관리하는 기능은 BeanFactory와 같음
    • Spring의 각종 부가 서비스 추가로 제공
    • Spring이 제공하는 ApplicationContext 구현 클래스가 여러 가지 종류가 있음

 

 

Maven project 디렉토리 구조

모듈화 → 필수는 아님! 편의를 위함
  1. src/main/java
  2. src/test/java
  3. src/main/resource
    • 정적 문서, 환경 설정 문서 등 (~.xml)

 

 

라이브러리 추가

 

📑 참고

Spring → 웹 전용이 아님

순수 애플리케이션에도 사용 가능

모듈 중 웹에 적합한 모듈이 있음 (MVC 아키텍처)

 

pom.xml → 라이브러리 관리 설정