피드로 돌아가기
SwiftUI + Combine 핥아보기
강남언니 공식 블로그강남언니 공식 블로그
Mobile

SwiftUI + Combine 핥아보기

Apple이 SwiftUI와 Combine 프레임워크를 공개해 Storyboard/Autolayout 기반 UI 개발을 선언형 코드 + 리액티브 데이터 바인딩으로 대체

배광민2019년 7월 28일12beginner

Context

기존 iOS 개발은 Storyboard와 Autolayout을 통해 UI를 구성했으며, 데이터 바인딩을 위해 ViewController와 Delegate 패턴에 의존했다. WWDC 2019에서 Apple은 이러한 전통적 UI/데이터 관리 방식을 대체할 새로운 프레임워크를 발표했다.

Technical Solution

  • SwiftUI를 통한 선언형 UI 작성: Storyboard 대신 Swift 코드로 View를 구성하며, Text, Image 등의 기본 컴포넌트를 체이닝 방식의 modifier로 스타일링
  • List 컴포넌트로 UITableView 대체: DataSource/Delegate 구현 없이 List(0..<5) { } 형태로 반복 구조의 UI 생성
  • Combine 프레임워크를 통한 리액티브 데이터 바인딩: PassthroughSubject로 Input 이벤트를 정의하고, map/filter/zip 연산자로 데이터 변환 및 Output 구조체에 assign
  • BindableObject 프로토콜과 @ObjectBinding을 사용한 View-ViewModel 양방향 바인딩: ViewModel의 didChange Subject 발행 시 SwiftUI View가 자동으로 리렌더링
  • RxSwift와 유사한 Combine의 Publisher/Subscriber 패턴: AnyCancellable을 활용해 메모리 관리를 RxSwift의 DisposeBag처럼 처리

Key Takeaway

SwiftUI와 Combine의 조합은 ViewController 중심 아키텍처를 View 중심의 MVVM 패턴으로 전환하며, 리액티브 프로그래밍의 operator chain을 통해 복잡한 UI 상태 관리를 선언적으로 표현할 수 있다.


iOS 13 이상을 타겟하는 프로젝트에서 SwiftUI + Combine을 도입할 때, ViewModel에 Input enum으로 사용자 액션을 정의하고 Private한 Subject로 처리한 후 Output 구조체로 View 바인딩할 데이터를 구성하면, Delegate 메서드 작성 없이 RxSwift 수준의 리액티브 데이터 흐름을 구현할 수 있다.

원문 읽기