ASAuthorizationController는 애플서버에게 로그인을 요청하기도 하지만, 어떤 화면에서 띄울지도 정의한다. 클린아키텍처에서 두 가지의 기능을 담은 layer는 존재하면 안되기 때문에 이를 분리한다. (SRP준수)
Repository가 직접 StrategyImpl을 들고 있으면 testable하지 않게 된다. Repository는 StrategyImpl을 외부에서 주입도록 하고, StrategyProtocol만 바라본다.
ViewModel에서 로그인 case에 따라서 Config를 연관값으로 전달하고, Factory에서 StrategyImpl을 생성해서 StrategyProtocol을 반환한다. 이를 Repository에게 전달하고 Strategy를 수행한다.