Inversion of Control(IoC)
Spring 프레임워크가 가지는 가장 핵심적인 기능이 IoC이다. IoC 개념은 과거에도 많은 곳에서 사용된 개념이지만 최근 Spring 프레임워크와 같은 Lightweight 컨테이너 개념이 등장하면서 많은 개발자들에게 관심의 대상이 되고 있다.
Spring 프레임워크가 가지고 있는 가장 중요한 기능인 만큼 IoC 개념에 대해서 반드시 이해해야 한다. 사실 IoC가 무슨 개념인지를 제대로 이해한다면 이 장에서 다루고자하는 거의 모든 내용을 이해한 것이나 다름없다. 이 장의 나머지 부분에서는 단지 Spring 프레임워크가 IoC 기능을 지원하기 위하여 제공하는 API 사용법에 대하여 다루고 있다. 이 API에 대해서는 Spring 프레임워크에서 제공하는 레퍼런스 문서나 API 문서를 통해서도 쉽게 사용하는 것이 가능하다. IoC 개념은 Spring 프레임워크 뿐만 아니라 컨테이너 기능을 가지는 모든 영역에서 사용되고 있는 개념이므로 반드시 이해하기 바란다.
IoC란?
IoC는 이 절의 제목에서 알 수 있듯이 Inversion of Control의 약자이다. 우리나라 말로 직역해 보면 "역제어"라고 할 수 있다. 제어의 역전현상이라? 도대체 무엇에 대한 제어가 바뀌였다는 것인가? IoC 개념을 이해하기 위해서는 먼저 무엇에 대한 제어가 바뀐 것인지를 이해하는 것이 우선일 것으로 생각한다.
지금까지 우리들이 자바 기반으로 애플리케이션을 개발하기 위해서 자바 객체를 생성하고 서로간의 의존 관계를 연결시키는 작업에 대한 제어권이 누구에게 있었는지를 먼저 생각해보자. 자바가 처음 등장했을 때부터 지금까지 객체를 생성하고 각 객체간의 의존관계를 제어하는 권한은 우리 개발자들에게 있었다. 아마 대부분의 개발자들이 이처럼 모든 객체에 대한 제어권은 우리에게 있다고 인식해왔고 앞으로도 그렇게 생각하고 있을 것이다. 이 같은 생각이 일부분 맞는 부분도 있고 그렇지 않은 부분도 있다.
IoC에서 이야기하는 제어권의 역전이란 이처럼 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌였다는 것을 의미한다. 그렇다면 Spring 프레임워크 내부에 IoC 개념이 들어 있다는 말인가? 그렇다. Spring 프레임워크도 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있다. 즉, 컨테이너 기능을 내부에 포함하고 있다는 말이 된다. 이 같은 이유 때문에 Spring 프레임워크를 Spring 컨테이너, IoC 컨테이너와 같은 용어로 부르는 경우도 종종 볼 수 있다.
Spring 프레임워크가 등장하면서 Spring 프레임워크의 가장 큰 장점으로 개발자들에게 광고한 것이 앞에서 살펴본 IoC 컨테이너 기능이다. 그러나 지금까지 다룬 내용을 통해서 알 수 있듯이 IoC 기능은 Spring 프레임워크가 탄생하기 훨씬 이전부터 사용되던 개념이었다. 그러므로 "IoC 기능을 Spring 프레임워크의 장점이라고 이야기하는 것은 적합하지 않다."고 반론을 제기하면서 "새로운 개념을 사용하는 것이 적합하다."고 주장한 사람이 Martin Flowler이다. Martin Flowler는 http://martinfowler.com/articles/injection.html 문서를 통하여 Lightweight 컨테이너들이 이야기하는 IoC를 Dependency Injection이라는 용어로 사용하는 것이 더 적합하다고 이야기하고 있다.
Martin Flowler의 이 같은 구분 이후 IoC개념을 글을 쓰는 저자에 따라 다양한 방식으로 분류하고 있다. 아직까지 IoC개념을 체계적으로 분류하고 있지 않은 상태이기 때문에 필자 또한 필자가 생각하는데로 IoC 를 다음과 같이 분류했다.
제목 | 글쓴이 | 날짜 | 조회 |
---|---|---|---|
2003-09-20 |
11940 |
||
2003-09-20 |
11488 |
||
2003-09-20 |
20621 |
||
지구인 |
2010-08-27 |
19412 |
|
지구인 |
2009-09-07 |
13734 |
|
2010-01-29 |
15692 |
||
2004-10-07 |
16784 |
||
2009-05-24 |
4125 |
||
2009-05-23 |
2229 |
||
2009-05-23 |
3731 |
||
2009-05-18 |
14332 |
||
수병아리 |
2009-05-18 |
3092 |
|
2009-04-29 |
1565 |
||
2009-04-27 |
1161 |
||
2009-04-26 |
1318 |
||
2368 [sap] ERP 개념 |
sinanstn |
2009-04-24 |
2863 |
뽀글이예용 |
2009-04-22 |
2922 |
|
2009-04-20 |
2099 |
||
Exception |
2009-04-17 |
2980 |
|
Exception |
2009-04-17 |
2015 |
|
Exception |
2009-04-17 |
2880 |
|
Exception |
2009-04-15 |
2276 |
|
고수고수 |
2009-04-15 |
4701 |
|
2360 [공개소스] HTML TAG 한글사전 |
고수고수 |
2009-04-15 |
4007 |
아시오페아 |
2009-04-01 |
3763 |
|
나키 |
2009-03-31 |
6038 |
|
2357 [sap] [국방산업]성공사례 |
2009-03-30 |
2206 |
|
2009-03-27 |
4583 |