posted by 방랑군 2009. 9. 30. 15:19


 Spirng.NET의 IoC 컨테이너에서 객체의 생명주기에 대해서 알아보도록 하겠습니다. 먼저 IoC는 이제까지 new라는 연산자를 사용해서 객체를 생성해주던 것을 환경설정 파일에서 객체에 대한 설정을 해주고 프로그램에서 그 객체를 사용하는 것을 의미합니다. 환경설정 파일에서 객체를 생성해 줄 때 윈폼에서는 두 가지 방법이 있습니다. 바로 singleton과 prototype입니다. 아래는 두 가지 방식입니다. 디폴트로 singleton=true입니다.

<object id="car" type="ObjectLifeCycle.Car, ObjectLifeCycle" singleton="true"/>

 

<object id="car" type="ObjectLifeCycle.Car, ObjectLifeCycle" singleton="false"/> 


설정 파일에서 설정한 객체를 사용하기 위해서는 아래와 같이 사용합니다.
IApplicationContext ctx = ContextRegistry.GetContext();

 

Car car = ctx["car"] as Car;

Debug.WriteLine(car.GetHashCode().ToString());

=> IoC컨테이너를 불러와서 그 중에서 아이디가 "car"인 객체를 가져와서 그 객체의 고유한 값인 해쉬코드 값을 출력창에 보여줍니다. 이전에는 무조건 인터페이스 사용해야되는 줄 알았는데 그렇지 않는 것을 알 수 있었습니다. 그리고 여기서 singleton 방식은 해쉬코드값이 당연히 계속 같은 값을 찍을 것이고 prototype방식은 해쉬코드값이 계속 바뀔 것입니다.

다음 포스트에서는 여기에 DI기능을 추가하고 아키텍처에 Spring.NET를 사용할 경우에 객체의 생명주기를 어떤 방식으로 해야 더 효율적인가에 대해서 알아보도록 하겠습니다~