아키텍처가 복잡해지면, 레이어를 잘게 나누게 됩니다.
그런 상황에서 객체들 간의 의존성이 많이 복잡해져요,
위의 예시처럼 단순히 하나만 생성하는게 아니라 아래처럼 뎁스도 깊어질 수 있습니다.
Controller -> CommandBus -> CreateUserCommandHandler -> UserFactory -> UserRepository -> DatabaseConnection -> Config이 상황에서 직접 생성한다고 하면 Controller를 생성하기 위해 저 아래있는 Config 객체도 직접 코드에 작성해야 되는데, 그렇게 되면 너무 힘들어지죠 그래서, 생성에 대한 책임을 컨테이너한테 넘기는 겁니다.
Controller = IoCContainer.get('Controller') 이런 형태로요