[Spring] 제어의 역전(IoC)과 의존성 주입(DI)

GWANSU SHIN·2022년 7월 25일
1

spring

목록 보기
2/7

제어의 역전(Inversion of Control)

개발자가 직접 객체를 관리(제어)하는 것이 아니라 프레임워크(또는 컨테이너)에서 객체를 관리하는 행위

  • 객체에 대한 관리 권한이 프레임워크(또는 컨테이너)로 역전
  • 의존성 주입(DI)의 상위 개념

프레임워크 vs 라이브러리

프레임워크: 내가 작성한 코드를 제어하고, 대신 실행 (ex. JUnit)
라이브러리: 내가 작성한 코드가 직접 제어의 흐름을 담당

의존성 주입(Dependency Injection)

애플리케이션 실행 시점에 실제 생선된 객체 인스턴스의 참조가 연결되는 것

  • DI를 사용하면 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있음
    • 의존관계 코드를 손대지 않고 구현코드만 설정해서 동적인 연결을 구현
  • 생성자 주입, 필드 주입, 수정자 주입 등 다양한 방법 존재
  • 강하게 결합된 클래스들을 분리
  • 두 객체 간의 결합도를 낮춤
  • 객체의 유연성을 높임
  • 테스트 작성을 용이하게 함

IoC 컨테이너, DI 컨테이너

  • AppConfig 처럼 객체를 생성하고 관리하면서 의존관계를 연결
  • 의존관계 주입에 초점을 맞추어 최근에는 주로 DI 컨테이너라 부름
  • 어샘블러, 오브젝트 팩토리 등으로 불리기도 함

Reference

[Spring] 스프링 컨테이너 개념 및 동작 원리(DI,IoC,ApplicationContext 개념)
[Spring] 의존성 주입(Dependency Injection, DI)이란? 및 Spring이 의존성 주입을 지원하는 이유
[인프런] 스프링 핵심 원리 - 기본편 (김영한)

0개의 댓글