IoC, DI, Bean

마동찬·2023년 4월 23일
0

Ioc

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

IoC 컨테이너

  • 스프링에서는 IoC를 담당하는 컨테이너를 빈 팩토리, DI 컨테이너, 애플리케이션 컨텍스트라고 부른다.
  • 오브젝트의 생성과 오브젝트 사이의 런타임 관계를 설정하는 DI 관점으로 보면, 컨테이너를 빈 팩토리 또는 DI 컨테이너라고 부른다.
  • 그러나 스프링 컨테이너는 단순한 DI 작업보다 더 많은 일을 하는데, DI를 위한 빈 팩토리에 여러 가지 기능을 추가한 것을 애플리케이션 컨텍스트라고 한다.
  • 정리하자면, 애플리케이션 컨텍스트는 그 자체로 IoC와 DI 그 이상의 기능을 가졌다고 보면 된다.

DI

DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로,
객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다.

DI(의존성 주입)를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

첫번째 방법은 A객체가 B와 C객체를 New 생성자를 통해서 직접 생성하는 방법이고,

*두번째 방법은 외부에서 생성 된 객체를 setter()를 통해 사용하는 방법이다.

이러한 두번째 방식이 의존성 주입의 예시인데,
A 객체에서 B, C객체를 의존할 때 A 객체에서 직접 생성 하는 것이 아니라 외부(IOC컨테이너)에서 생성된 B, C객체를 주입시켜 setter 혹은 생성자를 통해 사용하는 방식이다.

스프링에서는 객체를 Bean이라고 부르며, 프로젝트가 실행될때 사용자가 Bean으로 관리하는 객체들의 생성과 소멸에 관련된 작업을 자동적으로 수행해주는데 객체가 생성되는 곳을 스프링에서는 Bean 컨테이너라고 부른다.

Bean

빈이란 스프링 IoC 컨테이너가 관리하는 자바 객체를 의미한다.
스프링에서 POJO(Plain Old Java Object)를 beans라고 부른다.
Spring Framework에서는 ApplicationContext.getBean()과 같은 메서드를 이용하여 직접 호출할 수 있다.

  • 어노테이션(Annotation)을 사용하는 방법
    Bean을 등록하기 위해서는 @Component Annotation을 사용한다. @Component가 등록되어 있는 경우에는 스프링이 확인하여 빈으로 등록시킨다.
    직접 @Component를 작성하여도 되며, 스테레오 타입(stereotype)인 @Controller, @Service, @Repository와 같은 어노테이션들도 자동으로 스캔하여 빈에 등록된다. @Controller 어노테이션을 타고 들어가 보면 다음과 같이 나타난다.
  • 스프링의 경우 @Component 스캔을 통해 자동으로 빈 등록을 하는 방식을 권장한다.
    Spring에서는 Main App 클래스에서 @ComponentScan 어노테이션을 사용해서 등록해야 하며
    Springboot 환경에서는 디폴트로 존재하는 @SpringBootApplication에 @ComponentScan어노테이션이 포함되어있다.
profile
새내기개발자 성장기록

0개의 댓글