Combine 프레임워크에서 제공하는 eraseToAnyPublisher 가 무엇이고 어떻게 사용하는건지 알아보도록 하겠습니다.
공식문서를 살펴보면 type eraser 를 사용하여 publisher 를 래핑한다고 정의되어 있네요.
그렇다면 type eraser 는 뭘까요?
type eraser 는 publisher 유형을 지우고 더 일반적인 형태로 변환하는 프로세스를 가르키는 용어라 생각할 수 있습니다.
eraseToAnyPublisher() 를 사용함으로써 다양한 모듈에서 추상화를 유지할 수 있게 해주고
기존 클라이언트에 영향을 주지 않고 기본 구현을 변경할 수 있다는 장점이 있다고 작성되어 있습니다.
아래 코드에 작성되어 있는 예제에서 TypeWithSubject 의 경우 실제 유형인 PassthroughSubject 로 노출하게 되고
TypeWithErasedSubject 는 eraseToAnyPublisher() 를 사용하여 이를 AnyPublisher 로 노출합니다.
TypeWithSubject 를 사용하게 될 경우 다른 모듈의 호출하는 TypeWithSubject.publisher 를 기본 유형으로 접근하게 됩니다.
즉, 호출을 중단하지 않고는 publisher 를 다른 유형으로 변경할 수 없다는걸 의미합니다.
TypeWithErasedSubject 를 사용하게 될 경우 호출자에게 AnyPublihser 로 표시되므로
원하는 대로 publisher 타입을 변경할 수 있습니다.
그럼 이제 실제로 어떻게 적용할 수 있을지 예제를 통해 확인해보겠습니다.
만약, 이 코드에서 eraseToAnyPublisher() 를 사용하지 않는다면 dataTaskPublisher 의 반환 타입인
<Data, URLError> 를 직접 처리해줘야하는 불편함이 생기게 됩니다.
그렇기 때문에 eraseToAnyPublisher() 작성해주게 되면
메서드를 사용하는 사람들에게 추상화된 인터페이스를 제공할 수 있게 됩니다.
'Combine' 카테고리의 다른 글
[Combine] ViewModel 의 상태변화를 View 에게 알려주고 싶다면 어떻게 해야할까? (0) | 2023.10.25 |
---|---|
[Combine] SwiftUI 에서는 Publisher 를 어떻게 구독할까? (0) | 2023.10.08 |
[Combine] Subject 알아보기 (PassthroughSubject / CurrentValueSubject) (0) | 2023.10.05 |
[Combine] Publisher 와 Subscriber 는 어떻게 연결할 수 있을까? (0) | 2023.09.28 |
[Combine] Publisher / Operator / Subscriber 알아보기 (0) | 2023.09.27 |