TCA

eunsong·2025년 4월 17일

ios

목록 보기
1/1

[ADA Challenge 2]

멘토 네이선께서 키워드 하나를 콕 짚어주셨다.
TCA (The Composable Architecture) — 대규모 앱에서 유용한 구조라 한번쯤은 꼭 해보면 좋다고.
하지만 지금은 빠르게 MVP를 만들어야 하는 시기이기 때문에,
이번 프로젝트에서는 비추천이라고 하셨다.

그래서 나는 한번쯤을 요번에 가져볼까 한다.


기획부터 Hi-Fi까지 만들고 나니, 개발 기간이 딱 6일 남았다.
(금, 토, 일, 월, 화, 수… 생각보다 빡세다.)

조바심이 나는 건 사실이지만,
그럴수록 차근차근 구조부터 잡아보자.


  1. DDD 기반으로 도메인을 정의했다.
  2. 패키징 구조를 짠다.
  • 익숙한 클린 아키텍처를 기반으로 하되,
  • 시간 제약 때문에 단일 모듈 + 패키지 레이어만 분리
  1. TCA 조사 시작

왜 TCA를 해보고 싶었냐면…

안드로이드 개발할 때 익숙했던 MVI 구조와 유사한 단방향 데이터 흐름이 마음에 들었다.

시도 안해볼 이유가 없잖아..?!

(모를 때가 무모할 수 있지.)

TCA는 뭐예요?

  • SwiftUI 앱을 위한 단방향 데이터 흐름 아키텍처
  • 핵심은 상태(State), 액션(Action), 리듀서(Reducer)
  • Point-Free 팀에서 오픈소스로 개발

서드파티지만 믿을 만한 이유

유명 Swift 커뮤니티에서 제작했고, 꾸준히 업데이트하며, 스타트업이나 기술 지향 팀들은 이미 TCA 기반 앱을 운영하고 있다고한다.

TCA 흐름

[View]
   ↓
Action
   ↓
[Reducer] → State 변경
   ↓
[View] 다시 그려짐
   ↓
(필요시 Effect 실행 → 다시 Action 발생)

1. State (상태)

  • 앱 또는 화면의 현재 상태를 정의한 구조체
  • 예: @State, @StateObject와 비슷한 개념
struct AppState {
    var count = 0
    var isLoading = false
}

2. Action (행위/이벤트)

  • 유저가 한 행동, 시스템의 반응 등을 모두 이벤트로 표현
  • Enum으로 정의함
enum AppAction {
    case incrementTapped
    case decrementTapped
    case responseReceived(Result<Int, Error>)
}

3. Reducer (상태 변화 로직)

  • Action + State → 새로운 State를 리턴
  • switch 문으로 액션에 따라 상태를 업데이트
  • Effect(비동기 작업)도 여기서 정의 가능
let appReducer = Reducer<AppState, AppAction, AppEnvironment> { state, action, env in
    switch action {
    case .incrementTapped:
        state.count += 1
        return .none
    case .decrementTapped:
        state.count -= 1
        return .none
    }
}

생각보다 복잡할 수도 있지만, SwiftUI를 더 깊이 이해하고, 단방향 데이터 흐름을 경험하는 기회로 삼아보려 한다.

profile
A place to study and explore my GitHub projects: github.com/freeskyES

0개의 댓글