Spring

[스프링 #2] 제어의 역전(IoC)

zamezzz 2017. 12. 30. 00:03

 스프링 #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라는 개념에 대해 정리해보겠습니다. 감사합니다.

반응형