associatedtype
- Generic과 유사한 형태로, Protocol에서 사용될 타입에 대한 네임 스페이스, placeholer이다.
- 실제로 Protocol을 채택해서 사용하기 전까지는 사용되는 타입이 무엇인지 명시가 되지 않는다.
MVVM에서 Input/Output 패턴을 사용하면, 우리는 ViewModel마다 Input, Output구조체를 만들어줘야 한다.
이것이 과연 최선의 방법일까?
이것을 우리는 프로토콜을 이용해서 해결할 수 있다.
프로젝트를 구성하다 보면, 공통적으로 생기는 요소들, 반복되는 속성/메서드를 프로토콜의 형태로 사용할 수 있다.
만약, 프로퍼티의 타입이 동일하다면 그냥 작성하면 되지만,
각 화면의 뷰모델마다 서로 다른 Input, Output을 갖게 된다.
그러므로 우리는 타입이 달라질 경우를 생각해서 asssociated type으로 지정할 수 있다.
다른 유형이 생길 수 있으니(= 뷰모델마다 다른 유형의 Input, Outpt을 가지게 될테니) 임의의 타입을 지정해두고 프로토콜이 적용되는 순간 실제 타입을 지정하는 것이다.
간단하게 말해서 프로토콜에서 사용되는 제너릭이라고 볼 수 있다.
// associated type == generic
protocol CommonViewModel {
associatedtype Input
associatedtype Output
func transform(input: Input) -> Output
}
코드로 나타내면 위와 같다.
associatedtype으로 정의한 이유는,
- 타입이 여러개 존재한다.
- 각 뷰모델마다 input/output의 개수가 다르다.
- 내부에 구성되어 있는 프로퍼티가 다 다르기 때문에, 공통적인 요소를 뽑아내기가 어렵다. (어떤 타입인지 명확하게 정의하기 어렵기 때문)
'Swift' 카테고리의 다른 글
Automatic Reference Counting (ARC) (0) | 2023.01.25 |
---|---|
[MVVM] 인앤아웃버거? 인풋/아웃풋패턴! (3) | 2022.11.01 |
[RxCocoa] 코코아 맛보기 .. 홀짝 .. ☕️ (0) | 2022.10.31 |
Method Swizzling (0) | 2022.10.13 |
[Swift] 싱글톤 패턴에서 구조체와 클래스의 차이 (0) | 2022.10.13 |