2026-04-05

DI와 IoC

1. IoC (Inversion of Control, 제어의 역전)

객체의 생성과 관리 주도권이 개발자가 아니라 스프링 컨테이너로 넘어가는 것

원래는 개발자가 직접

Service service = new Service();

이렇게 객체를 만들고 관리했는데,

IoC에서는 스프링이 객체를 생성하고 관리한다.

핵심

  • 객체 생성
  • 객체 생명주기 관리
  • 의존성 연결

이걸 스프링이 대신 해준다.


2. DI (Dependency Injection, 의존성 주입)

필요한 객체를 직접 생성하지 않고 외부에서 주입받는 것

예를 들어 Service가 Repository를 필요로 할 때

class UserService {
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

이때 UserRepository를 직접 만들지 않고 스프링이 넣어준다.


관계

  • IoC는 큰 개념
  • DI는 IoC를 구현하는 대표 방식

제어의 흐름을 스프링에게 맡기는 것이 IoC이고,

그 방법 중 하나가 의존성 주입인 DI다.


왜 쓰나

  • 객체 간 결합도 감소
  • 테스트 용이
  • 구현체 교체 쉬움
  • 유지보수성 향상

요약

  • IoC = 제어권을 스프링이 가짐
  • DI = 필요한 객체를 주입받음

results matching ""

    No results matching ""