개발을 시작하는 이야기

[SwiftUI] SwiftUI란? 본문

개발 이야기/Swift

[SwiftUI] SwiftUI란?

Teiresias 2022. 4. 3. 18:35

이제 막 Swift 코딩에 익숙해지려고 하는 찰나 너무나도 UIKit에 익숙해져 있지만 새로 나온 SwiftUI도 알아야 하기 때문에 SwiftUI에 대한 공부를 시작해볼까 한다.

 

SwiftUI는 2019 WWDC에서 처음 소개되었는데 기존의 UIKit을 이용한 개발과는 상반된 개념을 갖고 있다고 한다. 

기존에는 스토리보드를 활용하여 화면의 구축과 흐름을 구성하고, ViewController에서 로직을 구현했다면, SwiftUI에서는 Swift 언어만으로 사용자 인터페이스를 구현할 수 있게 되었다. 물론 기존에도 가능은 했지만 더 간편하고 속도도 빨라졌다.

SwiftUI의 특징

선언적 구문(Declarative syntax)

단순하면서도 직관적인 구문을 이용하여 화면을 구성할 수 있게 해준다.

기존 UIKit과는 다르게 SwiftUI를 사용하게 되면 레이아웃이 실제로 구성되는 방식에 대한 고민을 덜게 된다. 기본적으로 레이아웃에 포함될 컴포넌트와 그 컴포넌트가 속하게 될 레이아웃 매니저의 종류와 속성만 선언해주면 된다. 레이아웃의 위치과 컨스트레인트, 렌더링 방식은 SwiftUI가 효율적인 방법으로 저동으로 처리하게 된다. 또한, 레이아웃이 선언되고 테스트되는 동안 Xcode에서 제공되는 프리뷰 캔버스를 통해서 프로젝트를 빌드할 필요 없이 실시간으로 변경되는 레이아웃을 확인할 수도 있다.

 

데이터 주도(Data driven)

앱에 있는 데이터와 앱의 사용자 인터페이스 및 로직 사이의 관계에 대한 의미를 내포한다. 

기존에는 앱 내의 데이터가 변경된다면 사용자 인터페이스가 데이터의 최신상태를 항상 유지하도록 로직을 처리하여야 했으나, SwiftUI는 앱의 데이터 모델과 컴포넌트 로직을 바인딩하는 방법으로 이러한 단점을 해결한다. 데이터 모델은 앱의 다른 부분에서 구독할 수 있는 데이터 변수를 게시하게 되고, 데이터가 변경이 이루어졌을 때 구독자에게 알림을 전달할 수 있다. 이로 인해 데이터의 변경사항들이 있을 때마다 컴포넌트를 수정할 필요 없이 그냥 두어도 SwiftUI가 자동으로 반영하게 된다.

SwiftUI vs UIKit

그렇지만 아직까지는 SwiftUI가 무조건 좋은것은 아니다. 아직은 시기상조일 수 있다.

일단 SwiftUI는 iOS13 이상의 버전만을 지원하고 있다. 물론 iOS13 이상의 버전 사용자가 월등히 높지만 제공하는 서비스에 따라 이전 버전을 고려해야 할 수도 있다. UIKit의 기능을 모두 대체하지 못한다. MapKit과 Webitview 등은 아직까지 UIKit을 사용해야 한다. 물론 SwiftUI와 UIKit을 통합하여 구성할 순 있다. 아직은 자료가 부족하다. 개발을 하다 보면 오류들과 모르는 것들이 나오기 마련인데 SwiftUI는 이제 겨우 2년 조금 넘은 기간이기 때문에 상대적으로 정보가 부족하다.

 

결국은 모든것은 시간이 해결해 줄 문제이다. 하지만 시간이 해결해 주기 위해서는 아직 몇 년이 더 필요하지 않을까 싶다. Swift가 2014년에 출시되었고, 8년의 시간이 흘렀지만 아직도 Objective-C에 대한 지원을 하고 있고 심지어 아직 Objective-C로 제작된 앱을 서비스하는 회사도 있다. (면접을 봤던 곳 중 한 곳에서 Objective-C로 제작된 앱을 Swift로 옮기려는 작업을 하고 있다고 이야기해주었다.)

 

Objective-C를 Swift가 대체하듯이 UIKit도 SwiftUI가 대체하게 될 것이다. SwiftUI가 UIKit의 단점을 보완해준다는 것은 부인하지 못할 사실이다. 개발의 세계에 이제 막 새끼발가락을 담갔다고 하지만 기술의 속도를 쫓기 위해서는 SwiftUI에 대해서도 틈틈이 공부해주어야겠다.

 

참고할 강의

Apple 공식문서 : https://developer.apple.com/tutorials/swiftui

Hacking with Swift : https://www.hackingwithswift.com/100/swiftui

Stanford : https://cs193p.sites.stanford.edu/

 

'개발 이야기 > Swift' 카테고리의 다른 글

UIKit  (0) 2022.04.05
Foundation  (0) 2022.04.04
Get과 Post의 차이점  (0) 2022.04.01
[Error] Command Ld failed with a nonzero exit code  (0) 2022.03.28
UserDefaults  (0) 2022.03.27