안녕하세요! 피피아노입니다 🎵
요즘 UIKit에 대해서 공부를 하고 있는데 까먹지 않으려면 꾸준히 기록을 해야 할 것 같아서 이번 포스팅에서는 UIKit에 대해서 정리를 해보려고 합니다.
그럼 바로 시작하겠습니다!
UIKit이란?
UIKit은 Apple 플랫폼용 앱을 구축하기 위한 프레임워크입니다. 표준 컴포넌트의 포괄적인 라이브러리를 사용하여 앱 인터페이스를 정의하고 관리합니다.
UIKit은 AppKit(macOS용)의 iOS 버전으로 시작되었으며, 2007년 첫 iPhone 발표와 함께 iPhone SDK의 일부로 처음 공개 되었습니다.
UIKit 특징
UIKit의 특징을 간단하게 정리해보겠습니다.
- 객체 지향 UI 프레임워크 - iOS, iPadOS, tvOS 앱 개발을 위한 기본 프레임워크
- MVC 패턴 기반 - Model-View-Controller 아키텍처를 따름
- 명령형 - 명령형 프로그래밍 프레임워크
- Auto Layout - 제약 조건 기반의 적응형 레이아웃 시스템
- 뷰 계층 구조 - UIView를 상속한 컴포넌트들이 계층적으로 구성됨
- 뷰 컨트롤러 기반 - UIViewController가 화면과 사용자 상호작용 관리
- View - View를 직접 생성하고 제어(더 섬세하게 조절 가능)
UIView와 뷰 계층 구조
UIKit의 가장 기본적인 구성 요소는 UIView 클래스입니다. 모든 시각적 요소는 이 클래스를 상속받아 구현됩니다.
// 간단한 뷰 계층 구조 예시
let containerView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
containerView.backgroundColor = .gray
let childView = UIView(frame: CGRect(x: 50, y: 50, width: 200, height: 200))
childView.backgroundColor = .blue
containerView.addSubview(childView)
UIViewController와 화면 관리
UIViewController는 UIKit 앱의 화면과 사용자 상호작용을 관리하는 핵심 클래스라고 이해하시면 됩니다. 각 화면은 보통 하나의 뷰 컨트롤러에 의해 관리되고 아래와 같은 특징을 가지고 있습니다.
- 화면의 뷰 계층 구조 관리
- 사용자 이벤트에 대한 응답
- 다른 뷰 컨트롤러와의 전환 조정
- 시스템 이벤트(메모리 경고, 화면 회전 등)에 대한 처리
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 뷰가 메모리에 로드된 후 초기 설정
view.backgroundColor = .white
let label = UILabel(frame: CGRect(x: 20, y: 100, width: view.bounds.width - 40, height: 40))
label.text = "UIKit 예제"
label.textAlignment = .center
view.addSubview(label)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// 뷰가 화면에 나타나기 직전에 호출
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// 뷰가 화면에 나타난 후 호출
}
}
Auto Layout
UIKit의 가장 핵심 기능 중 하나는 Auto Layout입니다. 아마 UIKit을 살짝이라도 공부를 해봤거나 들어본 분은 Auto Layout도 같이 들어보셨을텐데, UIKit에서는 Auto Layout을 통해 화면 크기와 방향에 자동으로 적응하는 UI를 구축할 수 있습니다.
func setupConstraints() {
let button = UIButton(type: .system)
button.setTitle("탭하기", for: .normal)
button.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(button)
NSLayoutConstraint.activate([
button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
button.centerYAnchor.constraint(equalTo: view.centerYAnchor),
button.widthAnchor.constraint(equalToConstant: 100),
button.heightAnchor.constraint(equalToConstant: 44)
])
}
iPhone이 처음 나왔을 때는 Auto Layout이란 개념이 없었지만 아이폰의 라인업이 다양해지고 화면이 크기도 다양해지면서 일관된 레이아웃을 유지하기 위해 이러한 개념이 등장했다고 합니다.
SwiftUI와의 상호 운용성
UIKit은 SwiftUI와 통합해서 사용할 수 있는데 UIKit을 SwiftUI에서 사용하려면 UIViewRepresetable 프로토콜을 사용해야 하고
SwiftUI를 UIKit에서 사용하려면 UIHostingController를 사용해야 합니다.
UIKit의 생명주기
UIKit으로 만들어진 iOS 앱의 생명주기는 다음과 같은 상태로 관리되게 됩니다.
- Not Running: 앱이 실행되지 않은 상태
- Inactive: 앱이 실행 중이지만 이벤트를 받지 않는 상태
- Active: 앱이 실행 중이고 이벤트를 받을 수 있는 상태
- Background: 앱이 백그라운드에서 코드를 실행 중인 상태
- Suspended: 앱이 백그라운드에 있지만 코드를 실행하지 않는 상태
감사합니다.
잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!
궁금하신 부분은 댓글로 질문 부탁드립니다!
'Apple > UIKit' 카테고리의 다른 글
[UIKit] UIViewController란 무엇일까? (0) | 2025.03.19 |
---|