LoginUseCase는 init시점에 DIContainer를 주입받고, login 메소드 호출 시, 동적으로 dependencies 프로퍼티를 사용해서 loginRepository 타입으로 받아온다. 그후, repository의 메소드 호출을 통해 결과값을 받아온다.
LoginUseCase에서 DIContainer를 사용해서 로그인 버튼 input에 따라서 구체LoginRepository를 설계하려고 했다. 하지만 이렇게 설계하면 UseCase에서 RepositoryImpl을 알게 되기 때문에, domain layer가 data layer를 알게 된다. 즉, 의존성 역전이 깨져버리는 문제가 있기 때문에 다른 설계를 고민해야 했다.
LoginRepository가 LoginCase에 따라서 LoginStrategy를 사용해서 동적으로 로그인 수행 객체를 변경해주는 것이다.