Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- ios
- 알고리즘
- 스위프트
- 채널톡
- 트위스티드페어케이블
- 애니캐스트
- 네트워크
- internetprotocol
- swift_tca
- 이더넷프레임
- 패킷교환네트워크
- Algorithm
- Python
- 네트워크 전송방식
- 의존성역전
- 다익스트라최단경로
- 서로소 집합
- Swift
- 패킷
- 최단거리 알고리즘
- baekjoon 17406
- 합집합 찾기
- 광섬유케이블
- the composable architecture
- Multi Access
- ethernet_frame
- 바이너리서치
- Mobile Communication
- premble
- 단편화
Archives
- Today
- Total
INEEDACHACHA
TCA with SwiftUI (The Composable Architecture) 본문
TCA
- TCA(Composable Architecture)는 구성, 테스트 및 인체공학을 염두에 두고 일관되고 이해하기 쉬운 방식으로 애플리케이션을 구축하기 위한 라이브러리이다
- SwiftUI, UIKit 등에 사용할 수 있으며 모든 애플 플랫폼(iOS, macOS, visionOS, tvOS, watchOS)에서 사용할 수 있다
- 링크
https://github.com/pointfreeco/swift-composable-architecture?tab=readme-ov-file
Composable Architecture
- Composable Archituecture는 용 프로그램을 구축하는 데 사용할 수 있는 몇 가지 핵심 도구를 제공한다
- SwiftUI를 사용할 때 직면하는 불규칙한 문제들을 해결할 수 있는 방법들을 제공한다
상태 관리
- 간단한 값 유형을 사용하여 프로그램의 State를 관리하고, 이 State가 변하면 화면이 변하거나 다른 화면에서도 관찰할 수 있도록 한다
구성
- 큰 기능을 작은 구성 요소로 나누어 분리된 자체 모듈로 추출하고 쉽게 접착하여 기능을 형성한다.
- Dependency로 추출해서 매우 쉽게 접착해서 쓸 수 있다
사이드 이팩트
- 응용 프로그램의 특정 부분이 가능한 한 가장 테스트 가능하고 이해하기 쉬운 방법으로 외부 세계와 대화하도록 하는 방법
테스트
- 아키텍처에 구축된 기능을 테스트할 뿐만 아니라 여러 부분으로 구성된 기능에 대한 통합 테스트를 작성하고 부작용이 애플리케이션에 어떤 영향을 미치는지 파악하기 위해 엔드투엔드 테스트를 작성하는 방법이다
- 상기를 통해 비즈니스 로직이 기대하는 방식으로 실행되고 있음을 강력하게 보장할 수 있다
TCA 구성
- Composable Architecture를 사용하여 기능을 구축하려면 도메인을 모델링하는 몇 가지 타입과 값을 정의해야 한다
- State: function이 Logic을 수행하고 UI를 랜더링하는 데 필요한 데이터를 보여주는 유형이다
- State에 있는 데이터가 바뀌면 화면이 새로 랜더링 된다
- Action: 기능적으로 발생할 수 있는 모든 작업을 나타내는 타입이다
- Ex) buttonTapped, requestProfile 등
- Reducer: 앱의 현재 상태를 액션이 동작했을 때 다음 상태로 변화시키는 기능을 나타낸다. 리듀서는 .run 등과 같은 effect 값을 return 하면서 수행할 수 있는 모든 Effect를 return할 책임이 있다
- Store: 스토어가 리듀서와 이팩트를 실행할 수 있도록 모든 사용자의 작업을 스토어에 전송하고, 스토어의 상태 변화를 관찰하여 UI를 새로 랜더링한다
- 상기와 같은 식으로 구성하면 테스트 가능성을 넓히고, 기능을 작게 나누고 또 합성해서 쓸 수 있다는 이점이 있다
TCA 데이터 흐름도
- TCA에서 가장 중요한 것은 '단방향' 데이터 플로우 아키텍쳐라는 것
- 데이터의 흐름이 일관되기 때문에 상태 변화를 추적하기가 쉽다
- State는 Reducer를 통해 업데이트 되고 View에서는 Action을 보내기만 하고 직접 State를 변경하지 않는다
TCA의 고려해야 할 점
- 기존 SwiftUI의 Property Wrapper들을 사용할 수 없다
- 라이브러리에서 제공하는 방식대로만 개발해야 한다
- 러닝 커브가 생각보다 크다
- 구조적으로 외부 라이브러리에 의존하는 것이 위험한 부분이기도 하다
TCA의 장점
- 코드의 통일성이 매우 좋음
- 같은 패턴의 코드와, 논리적 흐름이 비슷하기에 가독성이 좋다
- 따라서 공동 작업 및 코드리뷰의 효율 증가
- @State, @Published, @ObsevedObject, @StateObject등 양방향에서 데이터를 변화시키지 않기 때문에 조금 더 테스트에 용이하다.
- 지속적인 업데이트와 많은 사람들의 사용이 안정성을 보장
개선해야할 부분
- 거대한 Action
- 액션의 종류나 성격의 분류가 어렵다
- Action이 쌓이면서 점점 커진다.
- 적용 및 개선: https://channel.io/ko/blog/tech-swift_composable_architecture
- 채널 톡의 방법을 적용하여 가독성을 높이고 조금더 세분화 해서 유지보수 가능성을 높였다.
- 거대한 Feature
- 작업을 하다보면 한 Tap의 홈 부분은 매우 큰 Feature를 가지게 될 확률이 높다.
- delegate를 통해 상위로 올린 기능들이 쌓이게 된다.
- 작은 Feature도 커다란 기능을 가질 수 있다.
- 개선 방향: 8월에 배포가 되고 난 후 Feature나 Action 자체를 extension으로 파일을 나눌 생각이다.
'iOS' 카테고리의 다른 글
[UIKit] Tabbar - Programmatic (0) | 2024.05.15 |
---|---|
Dependency Inversion Principle feat.Swift (의존성 주입, 역전) (0) | 2024.03.31 |
Clean Architecture on iOS (MVVM) (0) | 2024.03.23 |
Combine - Subscriber (컴바인 구독) (0) | 2024.03.20 |
Combine - Publisher (컴바인 퍼블리셔) (0) | 2024.03.17 |