제어관계 역전
- 간단히 프로그램의 제어 흐름 구조가 뒤바뀌는 것.
- 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않는다.
- 모든 제어 권한을 자신이 아닌 다른 대상에게 위임한다. 위임 받은 제어권한을 갖는 특별한 오브젝트에 의해 만들어진다.
- Ioc 라고도 부른다
빈(@Bean)
- 스프링에서는 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 빈 이라고 부른다.
- 오브젝트의 생성과 관계설정 사용 등을 제어해주는 제어의 역전이 적용된 오브젝트를 가르키는 말 이다.
- 스프링이 직접 그 생성과 제어를 담당하는 오브젝트만을 빈이라고 부름
빈팩토리(BeanFactory)
-
스프링의 핵심을 담당하는건, 빅팩토리(BeanFactory), 어플리케이션 컨텍스트(ApplicationContext)
-
스프링에서 빈의 생성과 관계설정 같은 제어를 담당하는 Ioc오브젝트를 빈팩토리라고 부른다. 더 확장 해서는 어플리케이션 컨텍스트 라고 부른다.
-
빈팩토리라고 말할 때는 빈을 생성하고 관계를 설정하는 Ioc의 기본기능의 초점을 맞춘다.
-
애플리케이션 컨텍스트 라고 말할 때는 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 Ioc엔진의 의미가 부각한다. 애플리케이션 컨텍스는 빈팩토리를 상속받는다.
-
스프링에서는 애플리케이션컨텍스트, 빈팩토리, 스프링컨테이너라고도 부를 수 있다.
애플리케이션컨텍스트(ApplicationContext) 장점
- 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다.
- 애플리케이션 컨텍스트는 종합 Ioc서비스를 제공해준다.
- 오브젝트가 만들어지는 방식, 시점과 전력을 다르게 가져갈 수 있다.
- 자동생성, 오브젝트 후처리, 정보의 조합 설정, 방식의 다변화, 인터셉팅 등 오브젝트를 효과적으로 사용할 수 있는 기능을 제공한다.
- 빈을 검색하는 다양한 방법을 제공한다.
싱글톤(Singleton)
- 스프링은 여러번에 걸쳐 빈을 요청하더라도 매번 동일한 오브젝트를 돌려준다.
- 스프링은 기본적으로 별다른 설정을 하지 않으면 내부에서 빈 오브젝트를 모두 싱글톤으로 만든다.
- 서블릿은 대부분 멀티스레드 환경에서 싱글톤으로 동작한다, 서블릿 클래스당 하나의 오브젝트만 만들어두고 여러 스레드에서 하나의 오브젝트를 공유해서 동시에 사용한다.
자바 싱글톤 구현의 단첨
- private 생성자를 갖고 있기 때문에 상속할 수 없음.
- 싱글톤은 테스트하기 어려움.
- 서버 환겨에서는 싱글톤이 하나만 만들어지는것을 보장하지 못한다(여러개의 JVM 환경에 따라 독립적으로 오브젝트가 생성된다).
스프링 싱글톤
- 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기능을 제공하는데 그것을 싱글톤 레지스트리라고 부른다.
- private 생성자를 사용하지 않고, 평범한 자바 클래스를 싱글톤으로 활용 가능하게 해준다.
스코프(scope)
- 스프링에서 관리하는 오브젝트, 빈이 생성되고 적용되는 범위를 스코프 라고한다.
- 기본스코프는 싱글톤임.
- 경우에 따라서 프로토타입은 싱글톤과 달리 컨터에너에 요청할 때마다 매번 새로운 오브젝트를 리턴시켜준다. 그 외에도 요청스코프, 세션스코프가 존재한다.
DI 의존관계주입
- Ioc 컨테이너라고 불리던 스프링이 지금은 의존관계주입 DI 영문약자를 써서(Dependency Injection) DI 컨테이너라고 많이 불린다.
- 오브젝트는 오브젝트에 주입할 수 있는게 아니라 오브젝트의 레퍼런스가 전달될 뿐이다.
- DI는 오브젝트 레퍼런스를 외부로 부터 제공받아 주입한다.
- 오브젝트가 만들어지고 나서 런타임 시에 의존관계를 맺는 대상, 즉 실제 사용대상인 오브젝트를 의존오브젝트라고 부른다.
DI 3가지 조건
- 클래스모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않아야한다.
- 런타임 시점의 의존관계는 제 3의 존재가 결정한다.
- 오브젝트의 레퍼런스를 외부에서 제공 해줌으로 만들어진다.
참고자료