Closed Jeeehee closed 1 year ago
1번의 방법은 프로퍼티를 Optional로 지정하지 않아도 되지만, 결합도가 높아져 재사용과 테스트가 어려울 뿐만아니라
ViewModel의 수정이 ViewController에 영향을 주게됩니다.
따라서, ViewModel을 ViewController의 내부가 아닌 외부에서 주입하며 의존성을 분리하는 2번의 방식으로 구현하였습니다. 다만, ViewModel을 직접 주입하는 것이 아닌 ViewModel을 추상화 한 ViewModelProtocol을 주입하였습니다. 해당 Protocol을 채택한 모든 객체를 주입받을 수 있어 코드에 유연성을 더할뿐아니라, 해당 Protocol을 채택한 Mock 객체를 이용해 테스트에 더 용이하게 구현하였습니다.
고민
코드를 리팩토링하는 과정에서,
ViewController
가ViewModel
을 어떤 방식으로 알고있을 것인가? 하는 고민이 들었습니다. 여러 방법이 존재하지만, 제가 생각한 방법은 아래와 같이 2가지 입니다.1. ViewController가 ViewModel의 인스턴스를 생성해 갖고있는다.
2. Constructor Injection
class ViewController: UIViewController { var viewModel: ViewModel?
}