본문 바로가기

Combine

[Combine] ViewModel 에서 Input, Output 구현하기 MVVM 구조로 작업을 하다보면 자연스럽게 Input, Output 에 대한 개념을 접하게 됩니다.  그래서 이번 글에선 왜 이런 구조가 필요했고, 어떻게 사용하는지를 알아보려 합니다. 같이 예시로 살펴볼 화면은 인스타그램의 피드입니다.  사용자들은 좋아요를 누르기도 하고 DM을 보낼 수도 있고저장하기 기능도 사용할 수 있게 됩니다. 그러면 댓글 모두 보기를 클릭하게 될 경우엔 어떤 화면이 노출될까요?피드를 덮은 상태로 상위에 댓글View 가 보이게 됩니다. 즉, 사용자가 클릭을 하고(Input), 클릭에 대한 결과로 댓글View가 올라오게 됩니다(Output).(물론, 피드가 셀로 구성되어 있어서 중간에 많은 단계가 있을 수 있겠지만 이번 글에선 간단하게 생각만하고 넘어갑니다..!) 개발을 진행하면서 .. 더보기
[Combine] Publisher / Operator / Subscriber 알아보기 매번 Combine 관련 글들을 찾아 읽고 잊어버리는 것의 반복되다보니 Combine 을 제가 이해한 방식대로 정리된 글이 있으면 좋을 것 같아 글을 작성하게 되었습니다. 잘못된 점이라던지 궁금한 점이 있다면 알려주세요! Combine 프레임워크는 앱이 이벤트를 처리하는 방법에 대한 선언적 접근 방식을 제공한다고 합니다. 여러 delegate callback 이나 완료 핸들러 클로저로 구현하는 것이 아닌 특정 이벤트 소스에 대한 단일 처리 체인을 제공한다고 합니다. 다음으로는 Combine 의 핵심이라 볼 수 있는 "Publisher, Operator, Subscriber" 에 대해 알아보도록 하겠습니다. 1. Publisher 는 데이터 스트림을 생성하고 이를 구독할 수 있는 인터페이스를 제공해줍니다... 더보기
[Combine] eraseToAnyPublisher 는 무엇이고 어떻게 사용하는걸까? Combine 프레임워크에서 제공하는 eraseToAnyPublisher 가 무엇이고 어떻게 사용하는건지 알아보도록 하겠습니다. 공식문서를 살펴보면 type eraser 를 사용하여 publisher 를 래핑한다고 정의되어 있네요. 그렇다면 type eraser 는 뭘까요? type eraser 는 publisher 유형을 지우고 더 일반적인 형태로 변환하는 프로세스를 가르키는 용어라 생각할 수 있습니다. eraseToAnyPublisher() 를 사용함으로써 다양한 모듈에서 추상화를 유지할 수 있게 해주고 기존 클라이언트에 영향을 주지 않고 기본 구현을 변경할 수 있다는 장점이 있다고 작성되어 있습니다. 아래 코드에 작성되어 있는 예제에서 TypeWithSubject 의 경우 실제 유형인 Passthr.. 더보기