IoC 컨테이너 (Inversion of Control, 제어의 역전)

  • 개발자가 설정만 하면 컨테이너가 알아서 처리한다.

  • 스프링에서는 객체 생성, 연결 및 소멸의 책임이 IoC 컨테이너로 인계된다.

  • 자바 클래스는 의존성을 정의하고, IoC 컨테이너는 객체를 만들고 의존성을 연결한다.

  • IoC(제어의 역전)을 구현한 방법으로 DI(의존성 주입)를 사용한다.

 

Spring Bean

  • 빈(Bean)은 스프링 컨테이너를 통해 생성되고, 스프링에 의해 생명주기가 관리되는 객체를 의미한다.

  • 빈을 생성해야하는 클래스에 @Component 어노테이션을 사용하면 런타임 시점에서 IoC 컨테이너가 객체들을 스캔하며 빈으로 등록해줍니다.

  • Controller, Service 등을 하나의 빈(Bean)이라고 한다.

 

빈(Bean)의 장점

  • 의존성 생성에 대한 책임이 없기 때문에 느슨한 결합도를 유지할 수 있다.

 

스프링 빈(Bean)을 등록하는 2가지 방법

1. 컴포넌트 스캔과 자동 의존관계 설정

  • @Controller, @Service, @Repository 어노테이션 내부에 @Component가 등록되어있기 때문에 Spring Bean으로 자동 등록된다.

 

2. 자바 코드로 직접 스프링 빈 등록

  • 설정 클래스는 @Configuration 어노테이션을 클래스 선언부 앞에 추가를 한다.

  • 특정 타입을 리턴하는 메서드를 만들고 @Bean 어노테이션을 붙여주면 자동으로 해당 타입의 빈 객체가 생성된다.

싱글톤

  • 스프링은 스프링 컨테이너에 스프링 빈(Bean)을 등록할 때 기본으로 싱글톤으로 등록한다.

  • 싱글톤은 userController면 userController 하나, userService면 userService 하나를 뜻한다.

  • 같은 스프링 빈(Bean)이면 모두 같은 인스턴스이다.

 

정리

  • 스프링은 DI(의존성 주입)을 통해 객체간의 결합도를 낮추어 단위테스트가 가능한 설계를 도와준다.

  • 객체지향 설계원칙 중 OCP(개방 폐쇄 원칙), DIP(의존성 역전 원칙)은 프레임워크의 도움 없이 지키기 힘들다.

 

'Web > Spring' 카테고리의 다른 글

[Spring] @RequestMappnig 어노테이션  (0) 2020.12.28
[Spring] POJO 와 Java Beans  (0) 2020.12.28
[Spring] @Controller 와 @RestController  (0) 2020.12.28
[Spring] DAO 와 DTO  (0) 2020.12.25
[Spring] Spring MVC 구조  (0) 2020.12.25

+ Recent posts