IoC Container를 이용한 디자인
요즘 IoC Container에 관해 공부하고 있습니다.
Integration Test에 도움이 될 수 있을까 싶어서요.
Object Graph의 하위 특정 영역을 Mock으로 대체하고 테스트하는 것이 목적입니다.
아직 깊이 있게 이해한 건 아니지만 궁금한 것이 있습니다.
IoC Container 가 어떻게 Object Graph를 생성하는지는 대충 이해가 갑니다.
그런데 Mark Seemann의 책에서는 Service Locator 패턴을 안티패턴으로 설명하면서
IoC Container를 애플리케이션 진입점에서 Object Graph를 생성하라고 하던군요.
문제는... 그러면 오브젝트의 "관계"가 애플리케이션 시작시 정적으로 결정되게 되는데...
어떻게 이걸로 전체 프로그램을 디자인 할 수 있는지 의아합니다.
예를 들어, 애플리케이션 진입점 이후 특정 이벤트에 의해 새 오브젝트가 생성되는 경우에는
IoC Container가 관여할 수 없는 것 아닌가 하는 생각입니다.
새 오브젝트를 생성하면서 그 타입을 알아야 하는데..
그 타입까지는 팩토리 클래스를 이용해서 어떻게든 애플리케이션 진입시 주입될 수 있겠지만
그 오브젝트가 하위 Object Graphs를 가지고 있을 때는 그것까지는 어떻게 해결해야 할지 잘 모르겠습니다.
class A: IA
{
private IB b;
A(IB bb)
{
b=bb;
}
}
class B1: IB
{
private IC c;
A(IC c1)
{
c=c1;
}
}
class B2: IB
{
private IC c;
A(IC c1)
{
c=c1;
}
}
즉, 위에서 이벤트에 의해 IA가 생성될 때 IoC Container가 IA의 타입이나, A와 B1, B2의 관계를 지정해 줄 수 있냐 하는 겁니다.
제가 뭘 모르는건지.. 아니면 디자인 문제인지..
혹시 아시는 분 계시면 알려주시면 감사하겠습니다.
그걸 할 수 있다는 걸 스스로 아실겁니다. 다만
그걸 할 수 있다는 걸 스스로 아실겁니다.
다만 비효율적이라고 생각해서 물어보신 것 같습니다.
대답은 스스로 이미 하셨습니다.
안티 패턴은 원래 그래서 안티 패턴입니다.
댓글 달기