얼마전부터 Swift를 배우기 시작했다.
강의는 아래 Swiftful Thinking이라는 외국 유튜버를 추천받아 보기 시작했다.
Swift framework에는 SwiftUI와 UIKit이 있는데 그중에서 SwiftUI를 배우게 된다.
두 framework 모두 아직도 사용 가능하지만 점점 SwiftUI를 많이 사용한다고 한다. 그 이윤는 무엇일까?
오늘은 SwiftUI와 UIKit이 서로 어떻게 다른지 알아보려고 한다.
UIKit는 2008년에 출시된 framework이다.
C에서 파생된 객체 지향 프로그래밍 언어인 Objective-C의 문법을 따른다.
UIKit의 첫 번째 장점은 pre-built UI components가 많다는 것이다.
button, search bar 등의 UI를 사용자가 직접 만들 필요 없이 이미 UIKit에서 제공해주고 이를 Interface Builder와 Storyboards를 이용해 수정하면 쉽게 UI를 꾸밀 수 있다.

UIKit의 두 번째 장점은 방대한 자료이다.
IOS 초창기부터 사용되었던 framework이기 때문에 굉장히 많은 문서(공식문서)들과 커뮤니티가 존재한다.
또한, 오랫동안 사용되어 온만큼 IOS의 graphics나 animation등과 같은 다른 core framework과 안정적으로 연동된다.
UIKit의 첫 번째 단점은 앞서 언급했던 Interface Builder와 StoryBoards 기능이 페이지가 복잡해지고 디자인할 것이 많아질수록 View controller를 과대 사용하게 된다.
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
@end
UIKit의 두 번째 단점은 현대적인 design model을 적용하기 어렵다는 것이다. 대표적으로 reactive programming과 dependency injection 등이 있다.
// reactive programming: 데이터 스트림과 변경 사항 전파를 중심으로하는 비동기 프로그래밍 패러다임
// dependency injection: 객체 간의 관계를 결정해주는 디자인 패턴
UIKit을 활용해 현대적인 design을 하기 위해서는 개발자가 직접 코드를 작성해야 된다.
기존의 Story Boards가 복잡한 design일수록 개발하는데 어려움이 있었는데 이를 해결하는 framework를 2019년에 제시했다.
SwiftUI의 첫 번째 장점은 HTML과 같은 선언형 프로그래밍이기 때문에 디자인 요소들을 생성하고 그들의 속성을 선언하는 방식을 이용한다.
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text("Hello, world!")
}
.padding()
}
}
SwiftUI의 두 번째 장점은 State와 data binding이 제공하는 reactive programming이다.
State와 data binding을 통해 data의 변화를 빠르게 감지하고 다시 렌더링해서 관련된 모든 값을 변경시킨다.
import SwiftUI
struct ContentView: View {
@State private var message:String="How is your morning"
var body: some View {
VStack {
Text("State and Data binding!")
BodyView(message: $message)
}
.padding()
}
}
struct BodyView:View{
@Binding var message: String
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text(message)
}
.padding()
}
}
SwiftUI의 첫 번째 단점은 버전이 iOS 13부터만 지원된다는 것이다.
다만, SwiftUI와 UIkit는 서로 화환이 되기 떄문에 이를 이용해 더 오래된 iOS 버전에서도 사용할 수 있도록 만들 수 있다.
SwiftUI의 두 번째 단점은 상대적으로 UI component가 적다는 것이다.
하지만 기존에 UIKit가 워낙 방대한 UI Component를 제공했기도 했고 오히려 이를 활용해 코딩이 쉬운 SwiftUI에 적용시키는 방법도 많이 사용된다.
Swift 언어를 사용하는 두 가지 framework, UIKit와 SwiftUI를 알아보았다.
UIKit의 경우에는
더 원시적인 framework이기 때문에 Swift 언어에 익숙하고 다양한 UI component를 쓰는 개발자에게 좋을 것 같다.
또한, 구형 iOS까지 지원되는 앱을 만들기 위해서는 꼭 필요한 framework이다.
SwiftUI의 경우에는
애초에 UIKit를 더 간편하게 빠르게 사용하기 위해 만들어진 framework이기 때문에 초보자에게 더 적합하다.
그리고 현대의 다양한 design model 기법들을 내장하고 있고 복잡한 앱이라도 쉽게 제어할 수 있다는 것이 장점이다.