항해 5주차 마무리 DI / IoC

DI(Dependency Injection)는 객체 지향 프로그래밍에서 객체 간의 결합을 줄이기 위한 설계 패턴 중 하나입니다.

객체를 생성할 때 외부에서 생성된 객체를 포함시켜 종속성을 관리하는 방식입니다.

객체를 직접 생성하는 대신 DI는 객체 생성을 담당하는 컨테이너에 객체 생성 및 종속성 주입을 요청합니다.

즉, Spring 컨테이너와 같은 DI 컨테이너는 객체 간의 종속성을 직접 관리하는 개발자가 아닙니다.

객체 간의 종속성을 주입하는 방법입니다.

DI는 객체 간의 결합 정도를 줄이므로 유지 관리성과 확장성이 향상됩니다.

또한 개체 간의 종속성이 감소함에 따라 개체 단위 테스트가 더 쉬워지고 코드 재사용성이 향상됩니다.

DI에는 세 가지 주요 유형이 있습니다.

1. 생성자 주입

  • 생성자를 통해 종속성을 주입하는 방법입니다.
  • 생성자 매개변수에 @Autowired 주석을 추가하면 Spring 컨테이너는 해당 매개변수에 적합한 빈을 주입합니다.

2. 세터 주입

  • 세터를 통해 의존성을 주입하는 방법.
  • setter 메서드에 @Autowired 주석을 추가하면 스프링 컨테이너가 해당 메서드에 해당하는 빈을 삽입합니다.

3. 필드 주입

  • 종속성을 필드에 직접 삽입하는 방법입니다.
  • 필드에 @Autowired 주석을 추가하면 Spring 컨테이너는 해당 필드에 해당하는 빈을 주입합니다.

DI를 사용하면 객체 간의 결합 정도를 줄여 코드 유연성과 확장성을 높일 수 있습니다.

Spring은 기본적으로 DI를 지원하며 의존성 주입은 @Autowired를 사용하여 쉽게 처리할 수 있습니다.


IoC(Invention Of Control)는 객체 지향 프로그래밍에서 객체 생성 및 관계 구축을 자동으로 처리합니다.

객체 간의 결합을 줄이고 유연한 애플리케이션 개발을 지원하는 컨테이너입니다.

IoC 기능

  • 응용 프로그램에서 사용되는 개체를 생성하고 개체 간의 종속성을 관리하며 개체의 수명 주기를 관리합니다.
  • 개체를 만들 때 개체 간의 종속성이 자동으로 삽입됩니다.
  • 이를 DI(Dependency Injection)라고 하며 개체 간의 결합을 줄이고 유지 관리성을 높일 수 있습니다.

Bean은 SpringIoC 컨테이너가 관리하는 Java 객체를 말합니다.

즉, 객체를 생성하고 초기화하는 메소드를 정의할 때 사용합니다.

결과적으로 객체를 직접 생성하고 관리하지 않고,

Spring IoC 컨테이너가 객체를 생성하고 종속성을 주입하는 기능을 사용할 수 있습니다.

@Bean이 사용되면 Spring IoC 컨테이너는 메서드를 호출하고 메서드가 반환하는 객체를 빈으로 등록합니다.

@Bean을 사용할 때 메소드 이름이 bean 이름이 되며 bean 이름은 name 속성을 이용하여 별도로 지정할 수 있다.