etc/Today, I Learned

DI & IoC

yusung_ 2023. 1. 4. 11:09

1. DI

  • 의존 관계 주입 기능
  • Bean 설정 정보를 바탕으로 컨테이너가 자동으로 연결
  • 직접 객체 생성 X, 외부에서 생성 후 주입 시키는 방식

<장점>

1. 코드가 단순해진다.

2. 모듈간의 결합도가 낮아지고, 유연성이 높아진다.

3. 코드 중복을 방지할 수 있다.

4. 유지보수의 용이하다.

DI는 생성자 삽입, 수정자 삽입, 필드 주입이 있다.

생성자 주입은 생성자 호출시점에 딱 1번만 호출되는 것을 보장하며 불변, 필수 의존관계에 사용한다.

수정자 주입은 선택, 변경 가능성이 있는 의존관계에 사용되며 빈을 선택적으로 주입이 가능하다.

필드 주입은 외부에서 변경이 불가능하여 테스트 하기 힘들다. DI 프레임워크 없이는 작동하기 힘들며, 주로 애플리케이션과 관계없는 테스트코드나 @Configuration 같은 스프링 설정 목적으로 사용한다.

 

 

2. IoC (Inversion of Control)

  • IoC란 Inversion of Control의 줄임말이며, 제어의 역전이라고 한다.
  • 스프링 애플리케이션에서는 오브젝트(빈)의 생성과 의존 관계 설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 스프링 컨테이너가 담당한다.
  • 이를 스프링 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다.

 

3. DI와 IoC의 차이

DI는 의존관계를 어떻게 가질 것인가에 대한 문제고, IoC는 누가 소프트웨어의 제어권을 갖고 있느냐의 문제다. IoC 컨테이너가 빈을 생성할 때 빈들간의 의존관계를 DI를 통해 해결한다. DI는 IoC 사용을 필수로 요구하지 않는다는 점을 주의해야 한다.

 

'etc > Today, I Learned' 카테고리의 다른 글

캐시(Cache)와 쿠키(Cookie)  (0) 2023.03.03
싱글톤(Singleton) 패턴이란?  (0) 2023.01.10
JVM 구조와 JAVA의 동작 원리  (0) 2023.01.10
스택(Stack) & 큐(Queue)  (0) 2023.01.05
@Transactional  (0) 2022.12.14