/ SWIFTUI

SwiftUI 개요

SwiftUI 개요

SwiftUI에 대해서 집중적으로 다루기 전에 SwiftUI의 개요에 대하서 알고 정리하고 넘어가려 한다.

SwiftUI

2019년 발표된 SwiftUI는 애플 계열의 어플리케이션을 개발하는데 기존과 다른 완전히 새로운 방법을 제공한다. SwiftUI의 기본 설계 목적은 앱을 개발하는데 더 쉽고 빠르게 함과 동시에 개발할 때 발생하는 일반적인 버그를 줄이는 것이다. 이러한 요소들은 SwiftUI와 함께 xCode에 추가된 기능을(라이브 프리뷰) 사용해 실시간으로 테스트를 할 수 있게 한다.

SwiftUI의 가장 큰 장점은 선언적 구문과 데이터 주도 기반에서 비롯되며 선언적 구문은 RxSwift와 함수형 프로그래밍에서도 사용되는 주목을 받고 있는 코딩 기법이다.

SwiftUI와 UiKit

스위프트UI에서 사용될 선언적 구문에 대해서 이해하려면 기존에 사용했던 UIKit에 대해서 먼저 살펴보는 게 좋다. UI를 설계할 수 있도록 기존에 xCode는 인터페이스 빌더라는 강력한 도구를 포함하고 있었다. 이를 통해서 xib파일, storyboard 파일을 생성해 시각적으로 UI를 개발할 수 있었다.

UI를 구성하는데 필요한 레이아웃은 인터페이스 빌더 안에서 구성되며 좌측 하단 라이브러리 패널에서 버튼, 레이블, 텍스트 필드 등의 컴포넌트를 드래그해 화면을 구성할 수 있었다. 그리고 컨스트레인트를 사용해 화면에 제약을 설정할 수 있었다. 제약을 통해서 화면의 레이아웃이 디바이스 화면 크기에 따라 어떻게 달라지는지, 그리고 방향에 때라서 어떻게 변하는지 등을 결정했다.

하지만 인터페이스 빌더를 통해 작업하는 것은 많은 어려움이 있었는데, 첫째로 시각적으로 명확하게 화면을 볼 수 있지만, 미세한 수치 변화를 사람의 눈으로 판단해야 하는 부분에서 코드 리뷰와 유지 보수가 힘들었다. 그리고 협업 과정에서 스토리 보드 파일을 공유하다 보면 충돌 문제가 발생할 수 있었다.

이러한 어려움을 극복하기 위해서 많은 개발자가 코드 기반의 UI 구성 방법을 사용했고 이를 지원하는 다양한 라이브러리가 있다. 나 역시 오랜 기간 Texture라는 UI 라이브러리를 사용해왔다.

하지만 코드 기반 프로그래밍의 단점은 빌드를 통해 앱을 실행해야 시각적인 변화와 버그를 확인 할 수 있다는 점인데, SwiftUI는 실시간 랜더링을 지원하는 라이브 프리뷰를 통해서 부분적 UI 랜더링을 통해 이러한 단점을 극복한다.

선언적 구문

같은 코드 기반 프로그래밍이라고 해도 기존의 코드 기반 프로그래밍과 SwiftUI는 많은 차이가 있다. 기존 코드 기반의 프로그래밍에서는 UIKit의 컨포넌트를 코드로 선언해 설계하고 화면을 구성했는데, 이 과정에서 많은 레거시 코드가 발생하고 가독성이 떨어졌다. 이를 극복하기 위해서 Texture, SnapKit 등 다양한 코드 기반 UI 라이브러리가 존재하지만 애플 정식 프레임워크가 아니다보니 항상 리스크가 있고 라이브러리 사용법을 배워야 한다는 부분도 어려움이 있었다.

하지만 SwiftUI는 선언적 구문을 통해서 레이아웃과 복잡한 세부 사항을 직접 설계하는 대신 단순하면서도 직관적인 구문을 이용하여 화면을 기술하며 구현할 수 있게 해준다. 따라서 SwiftUI를 사용하면 화면의 복잡한 구현 방법을 고민할 필요 없이 UI가 어떤 모양을 해야하는지 선언하는 방식으로 레이아웃을 생성할 수 있다.

SwiftUI의 선언적 구문은 계층적으로 구조화되어 있는데, 따라서 작고 재사용이 가능한 커스텀 뷰를 함께 사용해 복잡한 뷰를 쉽게 생성할 수 있다.

Data Driven

SwiftUI는 데이터 주도적이다. 앱 데이터를 통한 바인딩을 통해 UI와 로직을 표현한다. 기존에는 앱의 상태값이 변함에 따라 UI를 변경하는 코드를 직접 포함해야 했다. 경우에 따라서는 주기적으로 값의 상태를 체크하는 코드를 작성할 필요가 있을 수 있다.

SwiftUI는 앱의 데이터와 UI 그리고 로직 사이에 바인딩을 제공해 이러한 복잡도를 해결했다. 데이터 주도 구현은 Combine과 함께 구독(subscribe)과 게시(publish)로 이루어 지는데 기존 RxSwift를 사용하는데 익숙하다면 쉽게 사용할 수 있다.

iOS 13

SwiftUI는 iOS 13 이후의 버전에서만 지원하는데 SE와 6s 이후 출시된 모델부터 지원한다. 2020년 1월 27일 애플 보고서에 따르면 모든 아이폰 디바이스 중에서 70%가 iOS 13이상을 사용하고 있으며 그 비율은 시간에 따라 계속 증가할 것이다. 따라서 빠르게 iOS 13에 대응해야 하며 SwifUI를 통한 개발을 준비해야 한다.