1. IoC(Inversion of Control)이란?
프로그램의 제어 흐름 구조가 바뀌는 것.
- 실행적인 측면
• 개발자가 객체의 생성과 제거를 제어
- 객체간의 관계적인 측면
• 애플리케이션은 여러 비지니스 로직을 수행하기 위해 둘 이상의 객체를 이용한다. 즉, 각 객체는 서로 의존적으로
객체참조를 통해서 비지니스 로직을 처리한다.
• IoC는 객체가 필요로하는 객체를 내부에서 생성하지 않고 외부에서 주입(Inject)을 받아서 사용하는 것을 말한다.
2. DI(Dependency Injection)이란?
모듈간의 의존성을 모듈의 외부(컨테이너)에서 주입시켜 주는 기능으로 Inversion of Control의 한 종류이다.
• DL(Dependency Lookup) : 저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 Bean을 Lookup하는 것을 말한다.
• DI(Dependency Injection) : 각 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해주는 것을 말한다. 개발자들은 빈 설정 파일에 의존관계가 필요하다는 정보를 추가하면 된다.
1. Constructor Injection : 생성자를 이용하여 의존관계를 연결
2. Setter Injection : setter 메소드를 이용하는 의존관계를 연결
3. Method Injection : Setter / Constructor Injection이 가지고 있는 한계점을 극복하기 위하여 Spring에서 지원하고 있는 DI의 한 종류
3. IoC 용어
- bean : Bean을 객체화하고 의존성을 주입하는 등의 관리를 위한 정보를 담고 있다.
* 자바빈 - EJB의 빈과 유사한 오브젝트 단위의 어플리케이션 컴포넌트를 말한다.
* 스프링빈 - 스프링 컨테이너가 생성과 관계설정, 사용 등을 제어해주는 오브젝트
name : id와 동반 선언시 해당 id의 별명(alias)으로 활용, name만 선언되면 id와 동일한 의미를 부여함
scope : singleton(default) - 설정파일 내 선언된 빈클래스의 인스턴스는 싱글톤으로 관리 및 제공.
prototype : 빈클래스 DI요청시마다 신규 인스턴스화가 진행되고 제공
request : 동일한 HttpServletRequest 활용시에는 싱글톤으로 빈 클래스의 인스턴스가 관리 및 제공되지만,
HttpServletRequest가 상이한 경우 Prototype으로 빈 클래스를 인스턴스화 수행.
session : 동일한 HttpServletSession 활용시에는 싱글톤으로 빈 클래스의 인스턴스가 관리 및 제공되지만,
HttpServletSession이 달라지는 경우 Prototype으로 빈 클래스를 인스턴스화 수행.
autowire-constructor : 생성자에 선언된 파라메터의 타입과 일치하는 빈이 존재 시 해당 인스턴스를 생성자를 통해 주입.
byName : 설정파일에 vean 등록시 id 또는 name 속성값을 활용한 메서드 명명규칙으로 요구되는 빈의 인스턴스가 주입
* 명명규칙 : public void set + '주입받을 빈의 id 또는 name 속성값(문자열로)' (주입받을 타입){}
byType : 설정파일에 빈 등록된 빈 클래스의 타입을 기준으로 메서드 대상 주입이 이루어짐.
* 명명규칙 : public void set + '상관없음' (주입받을 타입){}
- bean factory : 스프링의 IoC를 담당하는 핵심 컨테이너
빈을 등록/생성/조회/반환/관리한다. 보통 확장한 application context 이용
- application context : bean factory를 확장한 IoC 컨테이너
빈의 등록/생성/조회/반환/관리의 기능은 bean factory와 같지만, spring의 서비스를 추가로 제공, beanFactory 상속
- Configuration Metadata : application context 혹은 bean factory가 IoC를 적용하기 위해 사용하는 메타정보
Spring IoC container가 객체를 생성하고, 객체간의 의존성을 이어줄 수 있도록 필요한 정보 제공
- Container : bean을 관리한다는 의미에서 beanfactory나 application context를 가리킨다.
Spring IoC Container는 객체를 생성하고, 객체 간의 의존성을 이어주는 역할을 한다. 설정 메타데이터로 bean을 관리한다.
'Programming > Java&Spring' 카테고리의 다른 글
자바 변수명 규칙 (0) | 2021.04.18 |
---|---|
Spring AOP (0) | 2019.12.07 |