이번에 SwiftUI , TCA를 활용하면서 개인 프로젝트를 진행 중인데 이 과정에서 왜 사용하고 있었는지 의문이었던 부분을 기록으로 남겨두려고 한다. Equatable먼저 Swift에서 Equatable 프로토콜을 사용하는 이유는 두 객체를 비교해서 동일한지 여부를 판단할 수 있게 해주기 때문에 Equatable 채택해 == 연산자를 구현하는 방식으로 두 객체를 비교하게 된다. Swift 컴파일러는 struct나 enum이 Equatable을 채택할 때 모든 저장 프로퍼티가 Equatable를 준수하면 자동으로 == 연산자를 구현해주기 떄문에 직접 구현하지 않아도 돼서 매우 편리한 방법이다.import ComposableArchitectureimport MapKitstruct RunningState:..
SwiftUI는 @State , @ObservedObject 등 프로퍼티 래퍼를 통해 양방향 바인딩을 구현하고, State 관리를 간편하게 할 수 있는 기능을 제공한다. 추가적으로 Binding은 @State 프로퍼티 래퍼와 함께 View간 상호 작용을 위해 사용되고 이는 양방향 통신을 가능하게 한다. Binding을 사용하므로써 State 변화를 UI에 즉시 반영하면서 코드 작성이 간결하다는 장점이 있지만 State 관리가 복잡해질수록 변화에 따른 Side Effects를 관리하는데 어려움이 있다. 이런 이유로 전체 비즈니스 로직을 담당하고 내부 State 변화를 관리하는 TCA에서는 SwiftUI의 기본 @Binding 래퍼로 State를 관리하기에 적합하지 않을 수 있다. 이러한 문제를 해결하기 위..
Effect의 구현과 활용 - Action에 따른 결과 : EffectEffect는 Reducer의 액션이 반환하는 타입으로, 액션을 거친 모든 결과들을 칭한다. 그 중 외부에서 어떠한 처리가 일어나서 얻게된 예상과 다른 결과물들을 Side Effect라고 한다. Effect는 외부 시스템과 상호작용하는 작업을 나타내는데, 이를 통해 앱의 State가 변경된다. State를 직접 변경할 때의 Action과 달리, Effect는 비동기적인 작업을 수행하고 그 결과를 Action으로 반환하여 State에 반영하기 위해 사용 된다. 즉, Effect는 특정 Action을 실행한 후 그 결과에 따라 새로운 Action을 생성하고 이를 통해 State를 업데이트하는 역할을 담당한다. 네트워크 호출, 데이터 로딩,..
TCA의 기본 개념TCA는 현재 상태가 어떤지 파악하고 이를 관리하기 쉽게 하기 위해 고안된 단방향 아키텍처이다. 여기서 단방향 아키텍처라는 부분에 집중해보자. 먼저 MVVM패턴에 대해서 알아보면 MVVM 또한 단반향 아키텍처로서 View가 ViewModel의 상태를 관찰하고 해당 상태에 따라 업데이트 된다. View는 자기 자신을 렌더링하고 유지하기 위해 ViewModel에게 자신의 상태와 로직을 전달한다. 따라서 View는 그 상태와 로직이 어떤 방식으로 변형되는지 알지 못해야 한다. 그러나 SwiftUI와 같은 양방향 데이터 바인딩을 지원하는 프레임워크를 사용하면 View가 ViewModel에서의 요청을 받아와서 추가적인 작업을 해야하는 경우가 발생한다. 이를 방지하기 위해 @Published 속성..
오늘은 런닝앱을 만들고 있는 부분에 대한 고민과 과정에 대한 기록을 하려고 한다! 현재 런닝앱을 만들고 있는데 내가 뛴 기록을 공유하고 기록을 차곡차곡 쌓아나갈 수 있는 앱을 만들어 보려고한다. 현재 런닝을 기록하는 부분은 데이터를 저장하는 로직을 제외하고 거의 구현이 완료되었고 현재 주, 월 별로 저장된 기록을 확인하는 Record를 구현하고 있는 중이다.먼저 런닝을 기록하는 부분을 살펴보면struct RunningSession { let id: UUID let date: Date let distance: BehaviorRelay let duration: BehaviorRelay let locations: BehaviorRelay init(id: UUID = UU..
오늘은 이전에 알아봤던 Driver와 또 다른 특징을 가지고 있는 Relay에 대해서 알아보려고 한다 :) 런닝 앱을 구현하면서 이해하고 있는데 생각보다 유용하게 사용하고 있어 따로 정리를 해보도록 하자! Relay란 무엇일까.Relay는 상태 관리 및 이벤트를 전달하는데 특화되어 있는 Observable이라고 생각하는게 조금 이해하는게 쉽다. 대신 일반적인 Observable과 달리 종료되지 않고 에러를 방출하지 않는다는 중요한 특징이 있다. RxRelay에서 제공하는 기능이지만 RxCocoa를 임포트해 사용할 수 있다. 그래서 일반적으로 Observable을 사용해 onNext를 사용하는 방식이 아닌, accept를 통해 Dispose되기 전까지 동작해 UI에 사용된다고 이해하면 된다! 이 Relay..
RxSwift를 활용해 런닝 정보를 실시간으로 받아 기록을 측정할 수 있고 그 기록을 공유할 수 있는 앱을 만들어보고 있다 🙂 그 과정에서 Driver라는 오퍼레이터를 사용하게 되는데 오늘은 이 Driver에 대해서 알아보려고 한다! Driver는 UI에 특화된 Observable로 메인스케줄러에서 사용되며 UI와 관련된 데이터 스트림을 처리하는데 사용되는 특수한 형태의 Observable이다. 주로 UI바인딩에 사용되고 UI 업데이트를 안전하게 처리하는데 중요한 역할을 담당하고 있다. 그 중 Observable이 있는데 Driver를 사용하는 이유는 뭘까 바로바로 Observable 특성을 그대로 가져오면서도 몇가지 추가적인 기능을 제공하기 때문이다. 몇가지 추가기능에 대해서 살펴보면Main Thre..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.