여름의 서재

[Spring] DI & IoC & Bean 본문

Skill/Spring

[Spring] DI & IoC & Bean

엉아_ 2022. 1. 20. 00:33
728x90

 💡 IoC (Inversion of Control)

: 제어의 역전. 객체의 흐름, 생명주기관리등을 독립적인 제 3자에게 역할과 책임을 위임하는 방식의 프로그래밍 모델.

 

-> 제어의 역전으로 인해 제 3자 즉 다른 객체, 다른 컨테이너에게 제어에 대한 역할과 책임을 위임함으로써 변경에 유연한 코드 구조를 가져갈 수 있음.

 

💡 DI (Dependency Injection)

: 의존성 주입. 인터페이스를 통해 다이나믹하게 객체를 주입을 하여 유연한 프로그래밍을 가능하게 하는 패턴으로 좀 더 구체적인 의미

 

-> 클래스들 간 의존 관계를 최소화, 프로젝트 유지보수가 용이. 객체의 생성과 삭제를 스프링 컨테이너가 담당해줌.

 

- DI 종류

 

1. 생성자 삽입

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

 

2. Setter 주입

: 선택, 변경 가능성이 있는 의존관계에 사용되며 스프링빈을 선택적으로 등록이 가능.

 

3. 필드 주입

: '@Autowire'를 사용하는데 외부에서 변경이 불가능하여 테스트하기 힘듬.

 

💡 IoC 컨테이너

: 객체의 생성과 관계설정, 사용, 제거 등의 작업을 관리해주는 작업을 하는 컨테이너. 이때, IoC Container에 의해 관리되는 오브젝트들은 Bean 이라고 부른다. IoC Container는 Bean을 저장한다고 하여, BeanFactory 라고도 불린다. BeanFactory는 하나의 인터페이스이며, Application Context는 BeanFactory의 구현체를 상속받고 있는 인터페이스이다. 실제로 스프링에서 IoC Container 라고 불리는 것은 Application Context의 구현체이다.

- 컨테이너의 종류

1. Bean Factory : DI의 기본 사항을 제공하는 컨테이너, Bean을 생성하고 분배하는 작업을 한다.

2. ApplicationContext : Bean 팩토리와 유사하지만 더 많은 기능(메세지 다국화, 이벤트 발행 기능, 리소스 로딩 기능)을 제공, 미리 빈을 생성해 놓아(싱글톤) 빈이 필요할 때 즉시 사용할 수 있도록 보장한다.

💡 Bean

: IoC 컨테이너 안에 들어있는 객체로 필요할 때 IoC컨테이너에서 가져와서 사용. Spring에서는 직접 new를 이용하여 생성한 객체가 아니라, Spring에 의하여 관리당하는 자바 객체를 사용함. 이렇게 Spring에 의하여 생성되고 관리되는 자바 객체.

 

💡 Bean의 Scope

: 빈 스코프는 빈이 존재할 수 있는 범위.

 

- 싱글톤 : 기본 스코프로 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위.

- 프로토타입 : 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위.

- request : 웹 요청이 들어고 나갈때까지 유지하는 스코프

- session : 웹 세션이 생성, 종료할때까지 유지하는 스코프

- application : 웹서블릿 컨텍스트와 같은 범위로 유지하는 스코프

 

 

📌 스프링 기술 면접 정리

https://mkil.tistory.com/532

Comments