clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Swift
  • uikit
  • ㅅ
  • Q

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

SwiftUI TCA - 1. TCA의 등장 배경
SwiftUI+TCA+Combine

SwiftUI TCA - 1. TCA의 등장 배경

2024. 3. 6. 16:12

 

애플 생태계 개발은 주로 Swift로 많이 작성됩니다.

이렇게 작성된 코드들의 관리 방법또한 중요합니다. 3일뒤, 3주뒤, 3달뒤에 코드를 돌아볼 때 어느 파일에 어느 코드가 있을지 알아야 유지보수에 용이하기 때문입니다.

 

코드를 정리하고 구현하는데에는 일정한 규칙이 있습니다. 

정형화된 하나의 규칙을 제안하는것 = '디자인 패턴(Design Pattern)'
정리된 코드들을 더 추상화된 비즈니스적 문제 해결 관점으로 정리하는것 = '아키텍처 패턴(Architecture Pattern)'

 

여기선 상태관리 및 의존성 라이브러리인 The Composable Architecture를 활용한 아키텍쳐 패턴에 대해 정리합니다.

 

기존의 패턴

Swift, SwiftUI로 선언형 UI를 구현하는 환경에서는 MVVM패턴이 많이 채택되어 왔습니다.

그 외 Ribs, Viper, MVP, Clean 등이 주로 사용됩니다.

 

대표적으로 Robert C. Martin(Uncle Bob)의 Clean Architecture도 있습니다.

 

MVC에서 View의 로직을 처리하는 책임은 Controller에 있습니다. 이는 ViewModel의 형태로 변화했고 이는 MVVM으로 발전했습니다.

SwiftUI에서 MVVM 아키텍처를 사용해야한다는 주장은 점점 줄었습니다. 그 근거는 다음과 같습니다.

 

ViewModel 객체의 존재 이유였던 State-Binding이 SwiftUI의 선언형 UI에 이미 반영되어있습니다.

SwiftUI의 View가 이미 View+ViewModel의 기능을 갖고있습니다.

ViewModel가 존재 이유를 잃고있다는 내용입니다.

 

MVVM

View  <--->  ViewModel  <--> Model
           Binding
class ViewController {
    override func viewDidLoad() {
        viewModel.username
            .bind(to: label.rx.text)
            .disposed(by: disposeBag)
    }
}

 

SwiftUI

SwiftUI.View <--> Model Binding

 

 

이러한 배경에서 TCA가 등장했습니다.

 

TCA를 SwiftUI에서 사용해야한다는 내용도 아닙니다.

TCA는 SwiftUI에 의존적이고 러닝커브도 높습니다.

하지만 MVVM의 장점을 대부분 가져오면서 조금 더 특별한 이점이 있다고 합니다.

 

⭐️ TCA의 특별한 장점
1. 값타입에 기반한 안정적인 State의 변형
2. 유저 행동에 대한 로직을 처리하는 Action과 Effect의 일관성
3. 객체간 결합과 분리의 유용성
4. 비교적 편리한 테스트

 

 

사전지식이 필요합니다.

1. Swift의 타입에대한 이해(값, 참조)

https://clamp-coding.tistory.com/360

2. SwiftUI의 이해(@State, @Published, @Observable)등등

https://clamp-coding.tistory.com/512

3. inout 키워드의 이해

4. keyPath의 이해 

https://clamp-coding.tistory.com/391

 

 

* 참고하면 좋은 글

https://gist.github.com/unnnyong/439555659aa04bbbf78b2fcae9de7661

https://www.linkedin.com/pulse/architectural-pattern-vs-design-praveen-kumar-kushwaha/

 

 

앞으로의 TCA 포스팅은 해당 책을 참고하여 공부하고 학습한 뒤 정리된 글입니다.

- https://axiomatic-fuschia-666.notion.site/Chapter-1-Hello-TCA-70c56437681547d4b85cd1363a157356 

- https://gist.github.com/pilgwon/ea05e2207ab68bdd1f49dff97b293b17

저작자표시 비영리 동일조건 (새창열림)
    'SwiftUI+TCA+Combine' 카테고리의 다른 글
    • SwiftUI TCA - 3. State, Action, Reducer, Effect
    • SwiftUI TCA - 2. 단방향 아키텍처 TCA
    • SwiftUI - @ObservableObject, @ObservedObject, @Published, ObjectWillChange
    • SwftUI - @State, @Binding
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바