Swifter {Swift Developer}

메뉴

[Swift 3] 화면 만들기 기본지식

자동으로 생성되는 파일패키지

Xcode에서 새로운 프로젝트를 만들면 아래와 같이 몇 가지 파일들이 자동생성된다.

xcode8-001

  • AppDelegate.swift : 앱을 관리하는 최상위 프로그램
  • ViewController.swift : AppDelegate에서 호출된 첫 화면을 구성하는 프로그램

iOS앱 개발에서는 AppDelegate.swift, ViewController.swift에 소스코드를 추가하고 필요에 따라 프로그램 파일을 새로 만들어 개발을 하게 된다.

iOS 앱 구성

Xcode에서 프로젝트를 생성하게 되면, AppDelegate.swift라는 파일이 자동생성된다. 이 파일은 앱이 시작될 때 우선적으로 처리되는 부분이나 전체 동작을 제어하는 대리자인 UIApplication Delegate프로토콜을 계승한다. iOS앱을 실행하면 앱 전체를 관리하는 UIApplication객체가 생성된다. UIApplication객체는 AppDelegate.swift에서 관리되는 대리자로 전달된다.

앱 시작시 호출되는 application(_ application: UIApplication, didFinishLaunchingWithOptions ~)메소드에서 화면을 구성하는 뷰컨트롤러가 호출된다. 여기서 호출되는 뷰컨트롤러는 앱의 최상위에 놓여진다. 

  • UIApplication -> AppDelegate -> 뷰컨트롤러
  • 앱 초기화/시작 -> 앱 전체 제어 -> 시작화면 표시 -> 화면 표시 및 처리

iOS 앱화면 구성 및 전환

AppDelegate에서 화면을 관리하는 뷰컨트롤러가 호출된다. 뷰컨트롤러는 화면의 기본이 되는 뷰를 하나 가지고 있다. 뷰는 뷰컨트롤러와 같이 실행하는 개체 화면에서 발생하는 이벤트 처리를 한다. 뷰(View)는 뷰컨트롤러(ViewController)와 같이 실행되는 객체 화면에서 발생하는 이벤트를 처리한다. 이는 보통 MVC모델을 그대로 따라한 형태이다. MVC모델은 시스템 설계방법중 하나로 소프트웨어 기능을 Model, View, Controller의 세가지 역할로 나누어 설계하는 방법을 말한다. MVC모델은 객체의 상호작용 기능을 만들어가는 객체지향 프로그래밍 언어와 발전한 것으로 알려져 왔다.

  • Model: 데이터 관리
  • View: 화면 표시
  • Controller: 소프트웨어 작업 처리

xcode8-002

MVC모델을 사용한다면 프로그램간의 역할이 명확해져 소스코드의 유지보수성이 높아지고 UI가 각각 다른 화면별로 작업하는 공수가 줄어들 수 있다. 이미 PHP 및 JAVA 프레임웍에서 많이 사용되어 소개되어 친숙한 프레임웍이고 2012년까지 유행했었고 그 이후는 MVP프레임웍이 2014년까지 유행했다. 하지만 실제 실무 iOS프로젝트에서는 작년까지 MVC 프레임웍이 많이 사용하던 것으로 기억한다. (개인적인 생각임)

iOS 앱의 경우 뷰컨트롤러가 Controller로 보고, 뷰는 View역할을 한다. 다만 다른 언어와 다르게 iOS앱에서는 Model과 Controller역할이 명확하지 않고 Controller가 Model의 기능을 하기도 하기 때문이다. 또한 iOS 앱 화면의 단위의 델리게이트(대리자)가 있는 window에 뷰컨트롤러가 있는 뷰를 배치하여 모양을 만들게 된다. 그리고 그 위에 버튼 및 이미지, 레이블등의 UI요소를 배치하여 필요한 화면을 구성하게 된다.

ios-view

<iOS앱 화면 구성>

그리고 현재는 FRP기반의 RxSwift 또는 SwiftBond프레임웍을 기반으로 MVVM프레임웍을 주로 사용하여 개발을 진행하고 있다. 최근 흐름은 FRP와 MVVM이 통합된 형태로 유행되고 있어 그에 따른 개발방법론들이 많이 나오고 있다.

뷰에 배치하는 UI요소도 UIView는 뷰의 하위클래스로 iOS앱 화면은 기본적으로 목적에 따라 UIView배치로 구성된다.

  • UIViewController : 일반적인 화면을 구성하는 뷰컨트롤러
  • UINavigationController : 네비게이션 기능을 가진 화면을 구성하는 뷰컨트롤러
  • UITableViewController : 테이블 기능을 가진 화면을 구성하는 뷰컨트롤러
  • UITabViewController : 탭바 기능을 가진 화면을 구성하는 뷰컨트롤러
  • UIPageViewController : 페이징뷰 화면을 구성하는 뷰컨트롤러
  • UISplitViewController : 화면분할 뷰컨트롤러
  • UIPopoverController : 팝오버를 표시하는 뷰컨트롤러

이제 좀더 자세한 내용과 iOS10, Swift 3.0에 맞춘 내용을 보완하려고 한다.

Facebook Comments

카테고리:   Swift 3.0

댓글

죄송하지만 댓글은 닫혀 있습니다.