SwiftUI와 UIKit은 모두 iOS 앱 개발을 위한 UI 프레임워크이지만, 각각의 목적과 특징이 다르다.
Text("Hello, world!")
)UILabel
을 만들고 text
속성을 설정)UIButton
을 생성하고 타겟을 추가하는 등 여러 줄이 필요함.예제 코드 비교 (버튼 생성)
SwiftUI:
Button("Tap me") {
print("Button tapped!")
}
UIKit:
let button = UIButton(type: .system)
button.setTitle("Tap me", for: .normal)
button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
@State
, @Binding
, @ObservedObject
등을 사용해 데이터 바인딩이 쉬움.delegate
, NotificationCenter
, KVO
등을 사용해야 하므로 코드가 복잡해질 수 있음.SwiftUI 예제 (데이터 바인딩)
@State private var counter = 0
Button("Count: \(counter)") {
counter += 1
}
UIKit 예제 (데이터 바인딩)
var counter = 0
button.addTarget(self, action: #selector(updateCounter), for: .touchUpInside)
@objc func updateCounter() {
counter += 1
button.setTitle("Count: \(counter)", for: .normal)
}
.animation()
, .transition()
)UIView.animate
또는 Core Animation
사용해야 함SwiftUI 애니메이션
withAnimation {
isExpanded.toggle()
}
UIKit 애니메이션
UIView.animate(withDuration: 0.3) {
view.alpha = 0.5
}
즉, SwiftUI는 최신 iOS 버전에서만 동작하지만, UIKit은 더 많은 iOS 버전을 지원함.
Storyboard
없이 코드만으로 UI 설계 가능.Storyboard
와 XIB
사용 가능.기준 | SwiftUI | UIKit |
---|---|---|
개발 방식 | 선언형 | 명령형 |
코드 길이 | 짧고 간결 | 길고 복잡 |
데이터 바인딩 | 쉬움 (@State , @Binding ) | 어려움 (delegate , KVO ) |
애니메이션 | 간편 (.animation() ) | UIView.animate() 필요 |
iOS 지원 | iOS 13+ | iOS 2+ |
Storyboard | 필요 없음 | 필요할 수도 있음 |
학습 난이도 | 쉬움 | 어려움 |
📌 SwiftUI는 최신 프로젝트에서 추천되며, 간결한 코드와 직관적인 방식으로 UI를 만들 수 있음.
📌 UIKit은 기존 프로젝트 유지보수나 복잡한 UI 개발에 유리함.
📌 SwiftUI는 완전히 UIKit을 대체하지 않으며, UIKit과 함께 사용할 수 있음. (UIHostingController
활용)
SwiftUI는 미래의 UI 프레임워크지만, UIKit도 여전히 중요함.
현재는 SwiftUI + UIKit 병행 사용이 현실적인 접근 방식! 🚀