본문 바로가기

전체 글

[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.. 더보기
[SwiftUI] 데이터 흐름에 대해 알아봅시다 (3/3) (@StateObject 와 @ObservedObject 차이 / @Binding 과 @ObservedObject 차이) 앞선 글에서 SwiftUI 에서 사용하는 프로퍼티 래퍼에 대해 공부했지만 의문이 들었던 점이 몇가지 있어 정리하려합니다. 주관적으로 궁금했던 내용이지만 다른분들께 도움이 되면 좋겠습니다. 1. @StateObject 와 @ObservedObject 는 각각 어떤 상황에서 사용해야하는걸까? 두가지 프로퍼티 래퍼의 공통점은 SwiftUI 뷰에서 데이터의 상태를 관리하고 감시하는데 사용한다는 점입니다. 하지만, 목적과 동작에 대한 차이점이 존재합니다. 1-1. @StateObject SwiftUI 뷰의 수명주기 동안 유지되는 객체입니다. 이 객체는 해당 뷰 내에서 자체적으로 생성되고 관리됩니다. @StateObject 로 선언된 객체는 뷰의 변경 사항에 따라 새로고침되는 것이 아니라 뷰가 다시 로드될 때까지 .. 더보기
[SwiftUI] 데이터 흐름에 대해 알아봅시다 (2/3) (@StateObject, @ObservedObject) 지난번에 이어 SwiftUI 에서 데이터를 관리하는 방법 중 @StateObject, @ObservedObject 에 대해 알아보도록 합시다. 1. @StateObject 정의를 살펴보면 관찰 가능한 객체를 인스턴스화 하는 프로퍼티 래퍼 라고 정의되어 있습니다. 인스턴스화 한다는 것은 '객체를 생성하고 메모리에 할당하는 것' 을 의미합니다. @StateObject 를 사용할땐 단일 정보 소스로 사용하세요. 속성 선언엔 @StateObject 특성을 적용하고 ObserverableObject 프로토콜을 준수하는 초기 값을 제공하여 App, Scene, View 에서 상태 개체를 만듭니다. 뷰에서 생성된 데이터의 상태가 저장될 수 있으니 이렇게 생성된 하나의 데이터를 다른 곳에선 참조하는 식으로 사용하라는 .. 더보기
[SwiftUI] 데이터 흐름에 대해 알아봅시다 (1/3) (@State, @Binding) 안녕하세요. 칸트입니다 🙇🏻 어떤 글을 작성하면 좋을지 생각하다가 최근 SwiftUI 로 작업해야할 일이 생기면서 궁금증이 많아지더라구요. 그래서 정리 겸 글을 작성해보려 합니다. 우선 알아볼 것은 @State 와 @Binding 입니다. 1. @State 정의를 살펴보면 관리하는 값을 읽거나 쓸 수 있는 프로퍼티 래퍼 라고 정의되어 있네요. 그럼 이제 @State 를 어떻게 사용하는지 코드로 확인해봅시다. 객체 선언부에 @State 키워드를 넣게 되면 isPlaying 객체의 값을 저장하게 되고 SwiftUI 가 알아서 이를 관리하게 됩니다. 하지만, 알아두어야 할 것이 isPlaying 값을 사용할때 직접 참조를 하게 되기 때문에 공식 문서를 살펴보면 private 키워드를 사용하여 선언하는 것을 권.. 더보기