본문 바로가기

Combine

[Combine] eraseToAnyPublisher 는 무엇이고 어떻게 사용하는걸까?

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() 작성해주게 되면

메서드를 사용하는 사람들에게 추상화된 인터페이스를 제공할 수 있게 됩니다.