Clean Architecture를 적용하면서 코드 품질은 향상되었지만, ViewController 생성이 복잡해졌습니다.
로그인 화면 생성 코드 (개선 전)
// SceneDelegate.swift
let networkManager = NetworkManager()
let keychainManager = KeychainManager()
let tokenRepository = TokenRepository(
networkManager: networkManager,
keychainManager: keychainManager
)
let loginRepository = LoginRepository(
networkManager: networkManager
)
let socialLoginRepository = SocialLoginRepository(
networkManager: networkManager,
keychainManager: keychainManager
)
let loginUseCase = LoginUseCase(
loginRepository: loginRepository,
tokenRepository: tokenRepository
)
let socialLoginUseCase = SocialLoginUseCase(
socialLoginRepository: socialLoginRepository,
tokenRepository: tokenRepository
)
let loginViewModel = LoginViewModel(loginUseCase: loginUseCase)
let socialLoginViewModel = SocialLoginViewModel(socialLoginUseCase: socialLoginUseCase)
let loginViewController = LoginViewController(
loginViewModel: loginViewModel,
socialLoginViewModel: socialLoginViewModel
)
문제점
의존성 주입 컨테이너의 패턴인 Register/Resolve를 채택했습니다.
핵심 개념
싱글톤 패턴 적용