ASAuthorizationController는 애플서버에게 로그인을 요청하기도 하지만, 어떤 화면에서 띄울지도 정의한다. 클린아키텍처에서 두 가지의 기능을 담은 layer는 존재하면 안되기 때문에 이를 분리한다. (SRP준수)

image.png

Repository가 직접 StrategyImpl을 들고 있으면 testable하지 않게 된다. Repository는 StrategyImpl을 외부에서 주입도록 하고, StrategyProtocol만 바라본다.

유저의 이벤트에 의해 동적으로 생기는 Strategy

ViewModel에서 로그인 case에 따라서 Config를 연관값으로 전달하고, Factory에서 StrategyImpl을 생성해서 StrategyProtocol을 반환한다. 이를 Repository에게 전달하고 Strategy를 수행한다.