■ 스프링 #2. 제어의 역전 (IoC)
● 제어의 역전(IoC)란 ?
제어의 역전이란 일반적인 제어 구조와는 달리, 오브젝트가 자신이 사용할 오브젝트를 생성, 관계 설정, 사용등의 제어를 직접 하지 않습니다.
이러한 제어 권한을 다른 대상에게 위임하여, 위임받은 오브젝트가 이 모든 제어 권한을 갖도록 합니다.
스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 '빈(Bean)'이라고 부릅니다. 이 빈을 사용함으로써 설계가 깔끔해지고 유연성 및 확장성이 좋아진다는 장점을 가질 수 있게됩니다.
● 스프링의 각 요소(2) - IoC
스프링에서는 빈의 생성과 관계 설정 같은 제어를 담당하는 IoC 오브젝트를 '빈 팩토리'
라고 부르며, 이를 좀 더 확장한 개념을 '애플리케이션 컨텍스트'라고 합니다.
두 가지 개념은 기본적으로 동일하지만, 조금 차이가 있습니다.
빈팩토리 : 빈을 생성하고 관계를 설정하는 IoC의 기본 기능
애플리케이션 컨텍스트 : 애플리케이션 전반에 걸쳐 모든 제어 작업을 담당하는 IoC엔진
애플리케이션 컨텍스트는 빈 생성, 관계 설정등의 직접적인 정보를 담고 있진 않고 별도로 설정정보를 담고 있는 정보 파일을 통해 이를 활용한다고 보시면 됩니다.
빈팩토리 또는 애플리케이션 컨텍스트가 사용할 설정정보라는 표시를 위해서는 단순히
@Configuration이라는 어노테이션을 추가해주면됩니다.
그리고 오브젝트 생성을 담당하는 메소드엔 @Bean 어노테이션을 추가해줍니다.
이를 통해 해당 클래스가 IoC방식의 기능을 제공할 때 사용할 설정정보가 됩니다.
간단히 코드를 보겠습니다.
@Configuration public class MyConfig { @Bean public MyDao myDao() { return new MyDao(); } } |
이후 위의 설정 정보를 사용하는 애플리케이션 컨텍스트를 만들어보겠습니다.
AnnotationConfigApplicationContext를 이용하면 간단합니다.
public class ConfigTest { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class); MyDao dao = context.getBean("myDao", MyDao.class); } } |
getBean()메소드를 통해 애플리케이션 컨텍스트가 관리하는 오브젝트(MyConfig)의 메소드를 요청했습니다.
즉, MyConfig.class 의 myDao라는 이름을 가진 메소드를 요청한 것입니다.
위의 예시 처럼 애플리케이션 컨텍스트는 직접 제어 및 설정 정보 코드는 없지만, MyConfig라는 설정파일을 통해 관련 정보를 얻어 프로그램일 실행시킵니다.
이와 같이 애플리케이션 컨텍스트를 사용하면 얻는 장점이 몇 가지가 있습니다.
- 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다.
- 빈을 검색하는 다양한 방법을 제공한다. (getBean() 메소드 등)
- 종합 IoC서비스를 제공한다. (오브젝트를 효과적으로 활용하는 다양한 기술, 연동 등)
스프링의 IoC개념 및 애플리케이션 컨텍스트의 사용방법에 대해 정리했습니다.
다음 포스팅에서는 DI라는 개념에 대해 정리해보겠습니다. 감사합니다.
'Spring' 카테고리의 다른 글
[스프링 #6] Custom Annotation (0) | 2018.05.30 |
---|---|
[스프링 #5] DispatcherServlet (0) | 2018.05.05 |
[스프링 #4] 의존관계 주입 (DI) - 2 (0) | 2018.02.24 |
[스프링 #3] 의존관계 주입 (DI) - 1 (0) | 2018.01.19 |
[스프링 #1] 스프링 개념 및 DAO (0) | 2017.12.27 |