본문 바로가기

IT 살이/04. 기술 - 프로그래밍

개발 프레임워크 만들기 대장정 20 - Spring.NET::IoC

앞으로 포스트를 진행해가는 방법으로는 개념 설명과 그 개념에 필요한 샘플을 적절히 혼합해가는 방법을 사용하겠다. IoC, AOP처럼 새로 등장하는 개념들은 먼저 설명을 하겠다. 그리고 Spring.NET에서 제공하는 다른 유틸성 기능은 어떻게 사용하는지에 대한 샘플 코드로 바로 들어갈 것이다.  필요한 코드들은 sourceforge.net에서 제공하는 샘플들을 사용하도록 하겠다.

이번 포스트에서는 IoC에 대해서 먼저 알아볼 것이다. IoC? 어디서 많이 들어본 것 같은가? 국제 올림픽위원회 ? No ! Inversion of Control의 약자로서 "역제어" 정도로 해석될 수 있겠는데 영 어색하다. 의미는 이렇다. 기존의 프로그래밍에서는 객체 생성의 제어권을 개발자가 가졌다면 그 제어권이 이제 "반대측"으로 넘어갔다는 것이다. 여기서 "반대측"이란 바로 컨테이너를 말한다.  Spring.NET도 컨테이너 프레임워크중의 하나로서 Spring.NET 컨테이너가 객체를 생성하고 그 생명주기를 제어한다는 것이다.

앞에서 알아본 Unity Application Block 또한 컨테이너 프레임워크중의 하나로서 IoC를 구현하고 있는 프레임워크중의 하나이다. 컨테이너에서  객체들을 생성하고 lifecycle, scope를 관리하고 또는 적절한 곳에서 필요하다면 dependency를 inject해주는 역할을 한다. dependencies inject하면 setter injection, contructor injection 그리고 method injection이 있다는 것을 이전 포스트에서 알아봤다.

개념적으로는 어려울게 없다. IoC 하면 "컨테이너 프레워크", "dependency injection"을 떠올리면 된다. 객체를 컨테이너에 등록하는 절차 및 injection이 일어날 곳 그리고 어떤 dependencies가 어느 위치에서 inject될지에 대한 정보를 configuration을 통해서 할 수 있다. 물론 프로그램적으로도 가능하지만 configuration을 이용하는 방법이 더 실질적인 방법이다. 여기까지만 떠올릴 수 있다면 개념은 잡힌 것이다.

IoC 또는 DI(dependencies injection)이라는 용어를 누가 만들었고 어떤 차이점이 있는지는 지금 단계에서는 그닥 중요하지  않다. 나중에 내공이 생기고 관심이 있다면 좀 더 개인적으로 찾아보면 될 것이다.

다음 포스트에서는 아주 유용한 개념을 소개할 것이다. AOP( Aspect Oriented Programming)!