시작하기에 앞서

  • 공식문서를 내 나름대로 번역한 글이고 필요한 내용만 간추려 작성하려 했다.
  • 앱은 시스템 프레임워크와 개발자가 작성한 커스텀 코드간의 정교한 상호작용이다.
  • 시스템 프레임워크는 모든 앱이 실행되기 위해 필요한 기본적인 기반을 제공하고, 개발자가 커스터마이즈하기 위해 필요한 기반도 제공한다.
  • 이를 효과적으로, 즉 앱을 잘 만들기 위해서는 iOS의 기본적인 기반을 이해하고 어떻게 작동하는지를 이해하는 것이 중요하다.
  • iOS 프레임워크는 실행에 있어 MVC 패턴과 델리게이션에 의존한다.
  • 이런 디자인 패턴을 이해하는 것은 성공적인 앱을 만드는 데에 중요한 역할을 한다.

메인 함수(The Main Function)

  • 시작점(entry point)은 모든 C 기반의 앱에 있어 메인 함수이며 iOS도 다르지 않다.
  • 다른 점이 있다면 iOS 앱은 메인 함수를 직접 쓰지 않아도 된다는 것이다.
  • 왜냐하면 Xcode가 자동으로 하기 때문이다. 그렇기 때문에 이 메인 함수를 절대 바꿔서는 안된다.
  • 메인 함수에 대해 알아야할 내용은 이 메인 함수가 UIKit 프레임워크에게 제어 권한을 넘긴다는 것이다.
  • UIApplicationMain 함수는 앱의 핵심 객체를 만들고, 스토리보드에서 UI를 로딩하고, 커스텀 코드들의 최초 설정을 하는 프로세스를 다룬다.
  • 여기서 개발자가 제공해야할 것은 스토리보드파일과 커스텀 코드뿐이다.

앱의 구조

  • 시작하는 동안 UIApplicationMain 함수는 몇 가지 핵심 객체를 설정하고, 앱을 작동시킨다.
  • 모든 iOS 앱의 핵심은 UIApplication 객체이며, 이 객체는 시스템과 앱 안의 다른 객체들과의 상호작용을 용이하게 한다.
  • 아래의 그림은 일반적인 앱에서 발견할 수 있는 객체들을 나타내며, 해당 객체들의 역할을 나타낸다.
  • 또한, 알아야할 것은 iOS 앱은 MVC 패턴을 이용한다는 것이다.
  • MVC 패턴이란?
  • 이 패턴은 다른 스크린 사이즈의 장치에서도 똑같이 작동하기 위해 중요하다.

iOS 앱에서 객체들의 역할

  • UIApplication -> UIApplication 객체는 이벤트 루프나 기타 앱의 하이 레벨의 행동을 관리한다. 또한 핵심 앱 전환과 다른 푸시 알람 등을 보고한다. UIApplication 객체는 서브클래싱 없이 사용한다.
  • App delegate -> 앱 델리게이트는 커스텀 코드의 핵심이다. 이 객체는 UIApplication과 함께 작동하며 앱의 초기화, 상태 변환과 기타 하이 레벨의 이벤트를 다룬다. 이 객체는 모든 앱에 있어서 한 개만 존재하기 때문에 앱의 초기 데이터 구조를 설정하는 데 자주 사용된다.
  • Document and data model -> 데이터 모델 객체는 해당 앱에 한해서 앱의 컨텐츠를 저장합니다. 예를 들어 뱅킹 앱은 재정 거래 데이터베이스를 저장할 수 있고, 그림 그리기 앱이라면 그리기 명령등을 저장할 수 있다. 앱은 또한 문서 객체를 사용해 크고 작은 데이터 모델 객체들을 관리하기도 한다.
  • View controller -> 뷰 컨트롤러 객체는 스크린에 컨텐츠를 나타내는 것을 관리한다. 뷰 컨트롤러는 단일 뷰와 서브 뷰의 컬렉션을 관리한다. 뷰가 띄워질 때 뷰 컨트롤러는 뷰가 보이게끔 뷰를 앱의 window에 설치한다. 그리고 UIViewController 클래스는 모든 뷰 컨트롤러의 기본 클래스이다. UIViewController는 기본적인 기능인 뷰를 로드하거나 띄우기, 회전 등과 같은 보편적인 시스템 동작이 가능하도록 한다. UIKit 및 기타 프레임워크는 추가적으로 이미지 피커, 탭바, 내비게이션 등을 정의한다.
  • UIWindow -> UIWindow 객체는 스크린에 하나 혹은 그 이상의 뷰를 나타내는 것을 조정한다. 대부분의 앱은 오직 한개의 window를 가지고 있지만, 그렇지 않은 경우도 있다. 앱의 컨텐츠를 바꾸기 위해서는 뷰 컨트롤러를 이용해 뷰를 바꿔야만 한다. 절대 window 자체를 바꿔서는 안된다. 또한 UIApplication과 함께 일하며 뷰와 뷰 컨트롤에게 이벤트를 전달하기도 한다.
  • View objects, control objects, layer -> 뷰와 컨트롤은 앱의 컨텐츠를 시각적으로 표현한다. 뷰는 직사각형 영역에 컨텐츠를 나타내고 특정 이벤트에 반응하는 객체이다. 컨트롤은 버튼, 텍스트 필드, 스위치 등의 객체다. UIKit 프레임워크는다양한 타입의 컨텐츠를 나타내기 위한 기본적인 뷰를 제공한다. 또한 직접 UIView를 서브클래싱하여 커스터마이징 할 수 있다. 뷰와 컨트롤을 통합하는 것 외에도 추가적으로 코어 애니메이션 레이어를 뷰와 컨트롤 계층에 통합할 수 있다. 레이어 객체는 시각적인 내용을 나타낸다. 뷰는 레이어 객체를 집중적으로 사용하여 컨텐츠를 렌더링한다. 또한, 커스텀 레이어를 통해 복잡한 애니메이션과 다른 복잡한 시각 효과도 구현할 수 있다.
  • iOS 앱은 UIKit 객체가 상호 작용을 정의하지 않고 도움을 줄 뿐이다. 가령 앱 델리게이트를 통해 앱의 상태 변화를 전달하고 이에 따른 적절한 대응이 가능하도록 한다.