본문 바로가기
프로그래밍/Swift + SwiftUI

UIKit

by yonmoyonmo 2022. 1. 19.

SwiftUI말고 UIKit를 활용해서 앱을 개발하기 위해 UIKit에 대한 자료를 조사했다. 조사라고는 했지만 사실 그냥 공식문서를 한 번 보고 이해한 내용을 정리하여 본다.

About App Development with UIKit

IOS앱을 개발하기 위한 핵심 오브젝트들을 제공하는 것이 바로 UIKit 프레임워크다유저 상호작용 아니라 시스템과 앱의 상호작용 역시 관리한다앱은 기본적인 동작을 UIKit 의존하고 있고 필요에 따라 UIKit 동작을 커스텀 있다.

Xcode 개발을 시작하면 아주 기본적인 요소만으로 이루어진 템플릿을 시작점으로 제공받는다. 여기서부터 앱개발을 시작하면 된다. 컴파일과 번들 생성 등은 통합 개발 환경인 Xcode 알아서 처리해 준다. 

기본 템플릿을 보면 LauchScreen.storyboard파일이 있는데, UIKit 앱이 필수로 갖춰야할 리소스 하나이다. 다른 하나는 App Icon이다. 아이콘을 터치하여 앱이 실행되면 런치스크린이 바로 화면에 나타나 사용자들에게 앱이 시작 중이라는 것을 알릴 있고, 실재로 런치스크린이 화면에 있는 동안 앱은 필요로 하는 이니셜라이징 작업을 한다. 준비가 끝나면 런치스크린에서 화면으로 넘어간다.

시스템은 설정에 관한 메타데이터를 앱번들에 있는 Info.plist에서 가져온다. 개발을 하면서 필요에 따라 Info.plist 키와 값을 생성추가할 있다. 특정 하드웨어를 사용하거나 주로 Info.plist 조작하게 된다.

UIKit 앱의 코드 구조

UIKit 시스템과 상호작용하거나, 앱의 메인 이벤트 루프를 실행하거나, 화면을 띄우는 것과 같이 앱의 핵심 동작들을 위한 객체를 제공하게 되는데, 대부분 제공되는 그대로 사용하게 되지만 필요에 따라 커스텀하여 사용할 수도 있다. 필요할 어떤 객체를 어떻게 커스텀할지를 아는 것이 중요하다.

UIKit 구조는 Model-View-Controller(MVC) 디자인 패턴을 기반으로 하며, 목적에 따라 오브젝트들이 나눠진다. 모델 오브젝트는 앱의 데이터와 비지니스 로직을 관리하고 오브젝트는 데이터에 따른 화면을 그리고 컨트롤러 오브젝트는 모델과 오브젝트 사이에서 데이터를 옮긴다. 

출처 : https://developer.apple.com/documentation/uikit/about_app_development_with_uikit

그림은 일반적인 UIKit앱의 구조를 나타낸다. 개발자는 앱의 데이터 구조를 나타내는 모델 객체를 정의하고, UIKit 객체를 제공한다. UIKit 모델 객체 사이에서 이뤄지는 데이터 교환은 컨트롤러 객체와 delegate 객체를 통해 이뤄진다.

UIKit Foundation 프레임워크는 모델 객체를 정의할 있도록 기본 타입들을 제공한다. UIKit UIDocument라는 객체도 제공하는데, 이거는 disk-based 파일에 속한 데이터를 구조화 있다고 하는데 자세한 것은 문서를 읽어봐야 같다.

UIKit 개발 컨트롤러와 역할의 대부분 객체를 제공해준다.구체적으로 UIKit UIView 클래스는 화면 책임져 준다. UIApplication 클래스는 앱의 메인 이벤트 루프를 실행하고 앱의 life cycle 관리한다. UIApplication 클래스는 모든 IOS앱에 하나씩 인스턴스를 생성되는데, 앱의 제어와 조정을 담당하는 역할을 한다.


자료 출처

https://developer.apple.com/documentation/uikit

 

Apple Developer Documentation

 

developer.apple.com

https://developer.apple.com/documentation/uikit/about_app_development_with_uikit

 

Apple Developer Documentation

 

developer.apple.com

https://developer.apple.com/documentation/uikit/uiapplication

 

Apple Developer Documentation

 

developer.apple.com


댓글