-
Composable ArchitectureTCA 2021. 6. 11. 13:41
안녕하세요. 그린입니다🟢
이번 포스팅에서는 Composable Architecture에 대해 학습해보겠습니다🧑🏻💻
왜 알아보게 되었는지?
앞으로는 SwiftUI와 사용자 이벤트를 통한 뷰의 업데이트 등 상태 값을 처리하는 반응형의 Combine이 많이 사용되게 될거라 생각합니다.
이에 조금 더 SwiftUI 프레임워크에 적합하고 상태를 관리함에 따라 뷰의 변화를 더 효율적으로 할 수 있는 아키텍쳐이기에 중요합니다👍🏻
Composable Architecture?
컴포저블 아키텍쳐? 사전적으로 컴포저블은 구조나 구성이라는 뜻을 가집니다.
이를 토대로 해당 아키텍쳐 패턴을 해석하자면 큰 기능들을 분리해 구조적인 모듈로 나누고 이를 이용하는것이라 판단됩니다.
아래와 같이 컴포저블 아키텍쳐를 정의해볼 수 있습니다.
- SwiftUI 프레임워크 선언형 형태에 적합한 뷰 업데이트 방식에 맞는 아키텍쳐
- Point-Free에서 구현된 상태 관리 기반 아키텍쳐
- SwiftUI, UIKit 등 모든 애플의 플랫폼에서 사용 가능한 라이브러리
- 뷰의 변화를 크고 작은 기능을 붙여 작은 도메인으로 나누어 보여줄 수 있음
- Combine 프레임워크에 의존하기에 iOS 13 이상에서 가능
Composable Architecture의 장점?
상태를 관리하여 이에 따른 처리를 해주는것으로 아래와 같은 몇가지 장점을 들 수 있습니다.
- 상태관리: 앱 상태를 간단한 값 유형을 사용해 관리하여 여러 화면에서 상태를 공유해 즉시 변화를 줄 수 있음
- 컴포지션: 큰 기능을 분리하여 자체 모듈로 추출해 작은 구성 요소로 나누거나 붙여 기능을 합성할 수 있음
- 테스트: 전체 및 부분으로 구성된 기능에 대해 통합 및 부분적 테스트 작성이 가능
Composable Architecture의 기본구성
일반적으로 Swift Composable Architecture, 줄여서 SCA로 불립니다.
SCA를 이용하여 기능 구성 및 도메인 모델링을 합니다.
아래와 같이 크게 5가지로 구성이 되어 있습니다.
- State: 기능 수행 및 UI 렌더링을 위한 데이터 타입
- Action: 사용자 작업, 알림, 이벤트 소스 기능에서 발생할 수 있는 모든 작업을 나타내는 타입
- Environment: API 클라이언트, 분석 클라이언트 등과 같이 기능에 필요한 종속성을 보유하는 타입
- Reducer: 액션으로 상태 업데이트를 해주는 로직 함수로 모든 결과가 Effect 타입으로 반환
- Store: 실제로 기능을 구동하는 런타임으로 스토어가 리듀서와 이펙트를 실행하도록 사용자의 액션을 스토어에 보내고 스토어에서 상태를 관찰하여 UI를 업데이트함
Composable Architecture의 데이터 흐름?
1. 필요한 View 정의
2. Store를 사용하여 작업 전달
: 액션으로 핸들러 및 작업을 전달3. Reducer에서 비지니스 로직 코드 처리
4. 사이드 이펙트 및 종속성 처리
: Effect 처리 및 Environment를 통해 주입
5. 상태 업데이트
: 자동으로 동기화하여 State에 따른 View 업데이트
[느낀점]
이런 아키텍쳐 패턴이 있는지 사실 학습하기전에는 몰랐다.
되게 다양한 아키텍쳐 패턴이 있지만 적재적소에 사용하기란 쉽지 않다고 느껴졌다.
그렇지만 우리의 Swift 환경에서 앞으로 상태 기반으로 한 뷰의 업데이트 라던지 이벤트 기반으로 이뤄지는 SwiftUI와 React 환경이 많아질거라고 생각한다.
그러기에 이번에 학습한 Composable 아키텍쳐 패턴은 그 시대 흐름에 부합하는 패턴이라고 생각이 든다.
상태를 기반으로 뷰를 업데이트해주고 관리해준다면 MVC 패턴의 단점인 의존성에서 벗어날 수 있는 해결책이라고 보인다.
MVC 패턴에 익숙해져있던게 사실이라 낯설게 느껴지고 조금 어색하다.
그렇지만 발맞춰 따라가야하는것은 개발자의 숙명...🥲
오늘 학습은 겉햝기를 한 느낌이다. (아직 겉햝기가 다 이해가 되는 수준이 아니라...)
조금 더 딥하게 파보도록 하자🙌
[참고자료]
https://github.com/pointfreeco/swift-composable-architecture
'TCA' 카테고리의 다른 글
TCA - Debugging (2) 2022.10.06 TCA - Scope (7) 2022.09.26 TCA - pullback (0) 2022.09.19 CasePath (0) 2022.04.06 Composable Architecture로 랜덤 통신 구현하기 (0) 2021.07.17