토비의 스프링 (6)

제어의 역전

- 프로그램의 제어 흐름 구조가 뒤바뀌는 것


일반적 프로그램의 흐름은 main() 메소드와 같이

프로그램이 시작될때 다음에 사용할 오브젝트를 결정하고

결정한 오브젝트를 생성하고 생성된 오브젝트의

메소드를 호출하고 그 오브젝트 메소드 안에서 다음에 사용할

것을 결정하고 호출하는 식의 작업이 반복됨


제어의 역전은 오브젝트가 자신이 사용할 오브젝트를

스스로 선택하지 않음.

생성하지도 않음.


모든 제어 권한을 자신이 아닌 다른 대상에게 위임하기 떄문이다.


제어의 역전 개념은 이미 많이 적용되어있다.

대표적으로 서블릿


서블릿은 개발을해서 서버에 배포할 수는 있지만

그 실행을 개발자가 직접 제어할 수 있는 방법이 없다

대신 서블릿에 제어 권한을 가진 컨테이너가

적절시점에 서블릿 클래스의 오브젝트를 만들고

그 안의 메소드를 호출한다.

이것이 컨테이너 안에서 동작하는 구조는 간단한 방식이지만

제어의 역전 개념이 적용되어 있는것이다.


프레임워크도 제어의 역전 개념이 적용된 대표적인 기술이다.


보통 프레임워크 위에 개발한 클래스를 등록해두고

프레임워크가 흐름을 주도하는 중에 개발자가

만든 애플리케이션 코드를 사용하도록 만드는 방식이다.


애플리케이션은 프레임워크가 짜놓은 틀에서

수동적으로 동작해야한다.


제어의 역전에서는 프레임워크 또는 컨테이너와 같이 애플리케이션

컴포넌트의 생성과 관계설정, 사용, 생명주기 관리 등을

관장하는 존재가 필요하다.


스프링은 IOC(제어의 역전)을 모든 기능의 기초가

되는 기반기술로 삼고 있으며, IOC를 극한까지

적용하고 있는 프레임워크다.


스프링에서는 스프링이 제어권을 가지고 직접

만들고 관계를 부여하는 오브젝트를 빈(bean) 이라고 부른다.

자바빈 또는 엔터프라이즈 자바빈(EJB) 에서

말하는 빈과 비슷한 오브젝트 단위의

애플리케이션 컴포넌트를 말한다.

스프링 빈은 스프링 컨테이너가 생성과 관계설정,

사용 등을 제어해주는 제어의 역전이 적용된 오브젝트를 가르키는 말이다.


스프링에서는 IOC 오브젝트를 빈 팩토리 라고 부른다.

보통 빈 팩토리 보다는 이를 좀 더 확장한 애플리케이션 컨텍스트

를 주로 사용한다. 애플리케이션 컨텍스트는

IOC방식을 따라 만들어진 일종의 빈 팩토리 라고 생각하면 된다.


빈 팩토리는 빈을 생성하고 관계를 설정하는 IOC의 기본

기능에 초점을 맞춘 것이고 애플리케이션 컨텍스트는 애플리케이션

전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IOC엔진이라는

의미가 좀 더 부각된다고 보면 된다.


getBean("myUserDao", UserDao.class)

는 UserDao.class 에서 myUserDao 메소드를 호출한다는 의미.


애플리케이션 컨텍스트 사용의 이점.

1. 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다.

2. 애플리케이션 컨텍스트는 종합 IOC 서비스를 제공해준다.

3. 애플리케이션 컨텍스트는 빈을 검색하는 다양한 방법을 제공한다.


스프링 IOC의 용어

빈 - 스프링이 IOC 방식으로 관리하는 오브젝트

스프링을 사용하는 애플리케이션에서 만들어지는 모든 오브젝트가

다 빈은 아님. 그 중에서 스프링이 직접 생성과 제어를 담당하는 오브젝트만을

빈이라고 부른다.


빈 팩토리 - 스프링의 IOC를 담당하는 핵심 컨테이너를 가르킴.

빈을 등록, 생성, 조회, 반환 하는 빈을 관리하는 기능을 담당.


애플리케이션 컨텍스트 - 빈 팩토리를 확장한 IOC컨테이너.

빈 팩토리의 기능에서 스프링이 제공하는

각종 부가 서비스를 추가로 제공함.

ApplicationContext 는 BeanFactory를 상속함.


설정 정보 / 설정 메타정보 - 스프링의 설정 정보란 애플리케이션

컨텍스르 또는 빈 팩토리가 IOC를 적용하기 위해

사용하는 메타정보를 말함. 영어로 configuration



애플리케이션 컨텍스트는 싱글톤을 저장하고

관리하는 싱글톤 레지스트리 이기도 함.

스프링은 기본적으로 별다른 설정을 하지 않으면

내부에서 생성하는 빈 오브젝트를 모두 싱글톤으로 만든다.


싱글톤으로 만드는 이유는 스프링이 주로

적용되는 대상이 자바 엔터프라이즈 기술을 사용하는 서버 환경이기 때문.


서블릿은 자바 엔터프라이즈 기술의 가장 기본이 되는

서비스 오브젝트이다.

서블릿은 대부분 멀티스레드 환경에서 싱글톤으로 동작한다.

서블릿 클래스당 하나의 오브젝트를 생성하고 사용자의 요청을 담당하는

여러 스레드에서 하나의 오브젝트를 공유하여 동시 사용한다.


이렇게 애플리케이션 안에 제한된 수, 대개 한 개의 오브젝트만

만들어서 사용하는 것이 싱글톤 패턴의 원리.


싱글톤 패턴 구현 방식의 문제점

1. private 생성자를 갖고 있기 때문에 상속할 수 없다.

2. 싱글톤은 테스트하기가 힘들다.

3. 서버환경에서는 싱글톤이 하나만 만들어지는 것을 보장하지 못한다.

4. 싱글톤의 사용은 전역 상태를 만들 수 있기 떄문에 바람직하지 못하다.



'SPRING' 카테고리의 다른 글

토비의 스프링 (8)  (0) 2019.01.29
토비의 스프링 (7)  (0) 2019.01.21
토비의 스프링 (5)  (0) 2019.01.02
토비의 스프링 (4)  (0) 2019.01.02
토비의 스프링 (3)  (0) 2018.12.24

댓글

Designed by JB FACTORY