

iOS 애플리케이션을 개발할 때, 화면을 구성하는 방법은 크게 UIKit 와 SwiftUI 가 존재한다.
해당 방식들은 각각 iOS UI 개발의 접근 방식을 다르게 제공한다.
이러한 요소들을 이해하기 전, iOS의 기반이 되는 프레임워크인 Cocoa Touch Framework 에 대해 살펴봐야한다.
Cocoa Touch 는 iOS 애플리케이션 개발을 위한 기본 프레임워크 → 해당 프레임워크는 UIKit , Foundation 등의 핵심 프레임워크를 포함하며 iOS 앱이 하드웨어(iPhone, iPad)에서 실행될 수 있도록 지원한다.| 구성 요소 | 설명 |
|---|---|
| UIKit | iOS UI 개발을 담당하는 프레임워크 (뷰, 버튼, 애니메이션 등) |
| Foundation | 데이터 관리, 날짜, 파일 입출력, 네트워킹 등의 기능 제공 |
| Core Animation | 부드러운 애니메이션과 그래픽 렌더링 처리 |
| Core Graphics | 2D 그래픽을 처리하는 저수준 그래픽 API |
| Core Data | 데이터 저장 및 관리 (로컬 데이터베이스) |
| AVFoundation | 오디오, 비디오 재생 및 편집 기능 |
위 표를 토대로 UIKit , SwiftUI 는 Cocoa Touch 프레임워크 안에서 동작하는 UI 프레임워크라고 볼 수 있다.
⚡ 하지만 UIKit와 SwiftUI는 완전히 다른 방식으로 UI를 구현한다.
UIKitUIKit은 iOS 2부터 사용된 전통적인 UI 프레임워크이며, 현재 iOS 개발을 할 때 가장 많이 사용되는 방식이다.
현재도 대부분의 앱이 UIKit를 기반으로 만들어졌으며, 유지보수 역시 UIKit를 중심으로 진행된다.
명령형 프로그래밍(Imperative UI) 방식이다.
→ 개발자가 직접 UI 요소를 생성하고 업데이트할 때마다 코드를 실행해야 한다.
UIViewController 기반 구조다.
→ 앱의 화면을 UIViewController 가 관리하며, UI 요소들은 UIView 기반으로 구성된다.
스토리보드(Storyboard)와 코드 방식 지원
→ UIKit는 스토리보드를 이용한 GUI 방식과 코드 베이스 방식 2가지로 UI를 구성할 수 있다.
대부분의 기업에서 사용 중이다.
→ 현재까지도 대부분의 iOS 앱이 UIKit를 기반으로 개발되고 있다.
UIKit는 2가지 방법으로 UI를 개발한다.
StoryBoard (GUI 방식)
⭐ 코드 기반 UI
UIView 와 Auto Layout 을 직접 코드로 작성하여 UI를 구성한다.Git 충돌 이 상대적으로 적어 실무에서 선호된다.UIButton 을 직접 만들고 이벤트를 연결하는 명령형 방식class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(type: .system)
button.setTitle("클릭하세요", for: .normal)
button.frame = CGRect(x: 50, y: 150, width: 200, height: 50)
button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
view.addSubView(button)
}
@objc func buttonTapped() {
print("버튼이 눌렸습니다.")
}
}
SwiftUISwiftUI는 iOS 13부터 도입된 새로운 UI 프레임워크이다.
⭐ UIKit와는 다르게 선언형(Declarative UI) 방식을 사용한다.
이는 코드가 매우 간결하고 직관적이지만 아직 모든 UIKit 기능을 대체하지 못하고 있다.
선언현 프로그래밍(Declarative UI) 방식이다.
→ UI를 코드에서 직접 그리는게 아닌 UI가 어떤 모습이어야 하는지 를 선언하는 형식이다.
UIKit와 AppKit를 대체하는 새로운 방식이다.
→ SwiftUI는 iOS, macOS, watchOS, tvOS 에서 공통적으로 사용할 수 있는 UI 프레임워크이다.
코드가 간결하고 유지보수가 쉽다.
→ 기존 UIKit보다 훨씬 적은 코드로 UI를 만들 수 있다.
⭐ iOS 13 이상에서만 사용 가능하다.
→ iOS 12 이하를 지원해야 하는 앱에서는 SwiftUI를 단독으로 사용할 수 없다.
SwiftUI는 스토리보드 없이 모든 UI를 코드로 작성한다.
import SwiftUI
struct ContentView: View {
var body: some View {
Button("클릭하세요") {
print("버튼이 눌렸어요")
}
.padding()
}
}
→ UIKit와 달리 Button 을 선언하면 자동으로 표시된다.
→ ⭐ UI 변경이 자동으로 반영되므로 addSubView() 와 같은 함수의 사용이 필요 없다.
| UIKit | SwiftUI | |
|---|---|---|
| UI 구성 방식 | UIViewController + UIView | View 구조체 기반 |
| 프로그래밍 방식 | 명령형 (Imperative) | 선언형 (Declarative) |
| 파일 관리 | Storyboard, .xib, .swift 파일 분리됨 | 모든 UI가 .swift 파일에서 정의됨 |
| 호환성 | iOS 2 이상 지원 | iOS 13 이상 지원 |
| 기업 사용 | 대부분 UIKit 기반 | SwiftUI는 일부 화면에서 사용됨 |
| 장점 | 더 세밀한 UI 컨트롤 가능 | 코드가 간결하고 유지보수 용이 |
| 단점 | 코드가 많아질 수 있음 | 성숙도가 낮고 일부 기능 부족 |
- Cocoa Touch Framework는 iOS 개발의 기본이며, UIKit과 SwiftUI는 그 위에서 동작하는 UI 프레임워크이다.
- UIKit은 기존의 명령형 방식 UI 프레임워크이며, 현재 대부분의 앱에서 사용된다.
- SwiftUI는 선언형 방식의 새로운 UI 프레임워크지만, 아직 UIKit을 완전히 대체하지 못한다.