배경

ViewModel의 타입을 정해야할 필요가 있었다.

image.png

https://github.com/boostcampwm-2024/iOS06-molio/pull/17

1. Input-Transform-Output (단방향)

https://hyun-je.github.io/ios/2019/04/13/one_way_data_stream_viewmodel.html

구조

ViewModelType 정의

protocol ViewModelType {
    
    associatedtype Input
    associatedtype Output
    
    func transform(from input: Input) -> Output
}

모든 ViewModel은 ViewModelType을 따라야 하는데 이 때 Input과 Output 타입 내의 프로퍼티는 var 대신 let을, Subject(또는 Relay) 대신 Observable만 사용하도록 한정한다.

이를 통해 ViewModel에서 의도한 Input과 Output의 데이터 방향성을 View에서 오용하는 것을 방지할 수 있다.

https://dev-with-precious-dreams.tistory.com/227

  1. View에서 Inputs 발생