-
[SwiftUI] 1. TCA를 왜 도입하는걸까? (MVVM의 운명은?)공부/iOS 2024. 2. 27. 19:14
# TCA?
TCA(The Composable Architecture)는 Swift UI에서 떠오르고 있는 아키텍처 중 하나입니다.
https://github.com/pointfreeco/swift-composable-architecture
위의 깃허브 레포를 확인해보시면 10.9k의 별(2024.02.27 기준)을 보유하고 있습니다.
어째서 Swift UI의 아키텍처 트랜드가 TCA로 변화하고 있는 것일까요?
MVVM 패턴과 TCA 패턴에 대해 알아보며 그 이유를 확인해 봅시다.
# MVVM
MVVM 간단 소개
MVVM을 설명하기 위해 사용자가 검색창에 특정 키워드를 검색하는 상황을 예로 들겠습니다.
1) 사용자가 입력한 키워드를 ViewModel에 전달합니다.
2) ViewModel은 Model로부터 해당 키워드를 포함하고 있는 항목을 찾습니다.
3) Model로 부터 가져온 데이터를 ViewModel에 업데이트 합니다.
4) ViewModel의 값 변화를 View에 알려 검색결과를 새롭게 그리도록 합니다.
위의 과정을 보게되면, ViewModel이 View와 Model의 일처리를 대부분 담당하다보니 역할이 비대해진다는 특징이 있습니다.
View 에서는 ViewModel에서의 로직을 알지 못하고, 상태 변화를 감지하여 각각의 상황에 맞게 업데이트 한다는 점이죠.
Swift UI에서의 MVVM
Swift UI에서는 기본적으로 양방향 데이터 바인딩을 지원합니다. 그러다보니 MVVM의 View와 ViewModel 간의 구분이 모호해진다는 문제점이 있어 역할과 코드의 일관성을 해칠 우려가 있습니다. 상태 관리에도 어려움을 가지게 되죠.
따라서 등장하게 된 아키텍처가 Flux와 TCA같은 단방향 데이터 흐름 아키텍처입니다.
# Flux
Flux: Facebook이 SPA 구축을 위해 제안한 아키텍처 패턴 우선 TCA를 이해하기 위해선 단방향 데이터 흐름의 대표격인 Flux를 이해해보면 좋을 것 같아 간단히 알아보겠습니다.
Flux는 Facebook에서 개발한 웹 애플리케이션을 위한 아키텍처 패턴으로, 데이터 흐름을 단방향으로 유지하여 상태 관리를 보다 용이하게 합니다.
이 패턴의 핵심을 요약하면 다음과 같습니다..
1. 단방향 데이터 흐름은, 데이터 변경이 예측 가능하도록 만들어주며, 상태변화를 추적하기 쉽게 만든다.
2. 각각의 구성요소가 명시되어있고, (액션 → 디스패처 → 스토어 → 뷰) 형태로 구조가 명확해 코드의 복잡성이 줄어든다.
3. 각각의 요소가 독립적으로 동작하기에 확장성과 유지 보수가 용이하다. (= 테스트가 쉽다)
리엑트 환경에서의 복잡한 상태 관리를 이렇게 해결하고자 했는데...
마침 우리가 겪는 문제가 ViewModel의 역할이 크다는 점과 상태 관리에 어려움이 있다는 점이었죠?
이렇게 복잡한 상태 관리를 해결할 목적으로 개발된 것이 TCA 입니다.
# TCA
TCA는 일관되고 포괄적으로 애플리케이션을 개발할 수 있도록 도와주는 라이브러리 입니다.
TCA는 단방향 데이터 흐름 구조를 갖고 있어, 데이터 흐름을 파악하기가 쉽다보니 상태 변화를 추적하기가 쉽습니다.
가장 큰 특징이라면 @Published 관련 속성을 사용하지 않아 코드 추적 및 테스트를 더 쉽다는 점입니다.
TCA는 단방향 데이터 흐름을 강조하기에 State가 Reducer를 통해 업데이트되고 View에서 직접 변경될 수 없다는 것을 의미합니다.
그러나 마냥 장점만 있는 것은 아닙니다.
기존 SwiftUI의 속성들을 사용할 수 없으며, 라이브러리에서 제공하는 방식대로만 개발해야 합니다.
새로운 방식을 도입하기 위해 공부를 해야만 한다는점, 외부 라이브러리에 의존성이 높다는 점이 단점이죠.
하지만 코드가 통일성을 가져갈 수 있다는 점과 간결한 코드, Store 단위로 재사용이 가능한 독립적인 설계가 가능하다는 점이 SwiftUI를 채택한 사람들에게 사랑받는 아키텍처가 될 수 있었던 이유라 생각합니다. 현재도 지속적으로 업데이트가 진행되고 있으며, 많은 사람들이 사용하고 있는 만큼 어느정도 안정성을 보장하고 있다 생각합니다.
앞으로는 TCA를 활용한 Swift UI 개발이 대세가 되지 않을까 싶습니다.
이후 포스트에서는 TCA 튜토리얼을 따라해보며 학습을 해보도록 하겠습니다.
'공부 > iOS' 카테고리의 다른 글
Swift UI와 Gemini API를 활용한 Chat Bot: 채팅 구현 (2/2) (0) 2024.03.19 Swift UI와 Gemini API를 활용한 Chat Bot: 기능 구현 (1/2) (0) 2024.03.13 [iOS] status code가 200일 때 빈 응답이 들어오는 경우 (0) 2024.02.17 [iOS]텍스트필드가 등장할 때 타임아웃 뜨는 버그 해결법 (2) 2024.01.17 키체인을 활용해 jwt Token 안전하게 저장하기 (1) 2024.01.16