ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Composable Architecture
    TCA 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
Designed by Tistory.