본문 바로가기

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

개발 프레임워크 만들기 대장정 15- ObjectBuilder 계속

이번 포스트에서 Unity 컨테이너 확장에 대해서 포스팅을 할까 했는데 아무래도 ObjectBuilder에 대해서 좀 더 설명을 해야 할 것 같다. 코드를 보니까 바로 예제로 들어가기는 무리인듯 하다. 해서 ObjectBuilder가 객체를 생성하는 과정에 대해서 좀 더 자세히 알아보도록 하겠다. 다음은 바로 앞 포스트에서 보인 그림이다.

그림에서는 stage를 "Stage1", "Stage2"로 정의하고 있다.  그리고 각 stage별로 Strategy를 정의하고 있는데, 다음과 같다 : "Strategy1_1","Strategy1_2" 그리고 "Strategy2_1","Strategy2_2". ObjectBuilder의 Strategy는 IBuilderStrategy라는 인터페이스를 구현해야 한다. 이 인터페이스를 구현해야 ObjectBuilder가 그 Strategy를 인식할 수 있다.

IBuilderStrategy의 정의는 그림과 같다. IBuilderStrategy을 사용하면 객체가 생성되고 제거될때를 전 후해서 필요한 작업을 해 줄 수 있다.

PreBuildUp() 객체를 생성하기 전에 즉 Buildup하기 전에 Strategy에서 실행시켜야 하는 로직이 있다면 이 메소드를 구현하면된다.
PostBuildUp() 객체를 생성하고 나서 실행시켜야 하는 로직이 있다면 이 메소드를 구현한다.
PreTearDown() 객체를 컨테이너에서 제거하기전에 실행시켜야 하는 로직이 있다면 이 메소드를 구현한다.
PostTearDown() 객체를 제거한 후 실행시켜야 하는 로직이 있다면 이 메소드를 구현한다.

이 메소드들이 실행되는 순서는 다음 그림을 참조한다.

이 그림은 객체를 생성할때의 메소드가 호출되는 순서이다. 각 stage별로 포함된 Strategy의 PreBuildUp() 이 호출된 다음 그리고 나서 다시 반대순으로 PostBuildUp()이 호출된다. 중간 Stage에 Creation 단계가 있어야 할 것이다. 그림에 포함시기면 좋을텐데. 쯔읍...!

모든 Strategy의 PreBuildUp()과 PostBuildUp()이 호출되고 나면 해당 객체를 반환하게 된다.

객체를 컨테이너에서 제거하는 것도 유사한 절차를 밟는다. stage순서대로 PreTearDown()이 호출되고 다시 stage 역순으로 PostTearDown()이 호출된다.

오늘은 여기까지. 다음에 Unity 확장 예제를 알아보겠다. 근데, Unity 컨테이너를 확장하는 방법도 보니까 여러가지가 있는 듯하다. 이렇게 객체를 생성, 제거하는 과정에 참여하는 것도 있겠지만, 컨테이너 자체도 확장할 수 있는 듯 하고 또 어떤 확장이 있는지 모르겠다. 해서 확장하는 예제를 어떻게 해야 할지 좀 고민스럽다.

고민은 다음에 하고 오늘은 자자.