면접스터디 4W

apwierk·2022년 11월 12일
0

개인 공부

목록 보기
11/22
post-custom-banner

앱이 시작할 때 main.c에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가?

UIApplicationMain:

  • 코코아 터치 프레임 워크에서 앱 라이프 사이클을 시작하는 함수
  • 앱의 본체에 해당하는 객체인 UIApplication객체(singleton)를 생성하고 앱의 Life Cycle을 관리한다.
  • Delegate 객체를 생성하고 info.plist에서 필요한 nib file을 로드하고 메인 이벤트 루프를 실행시킨다.
  • application 객체는 delegate에게 중요한 런타임 이벤트(예: 앱 시작, 메모리 부족 경고 및 앱 종료)를 알리고, 적절히 응답 할 기회를 제공한다.

공식문서 코드

Int32 타입이 반환 타입으로 지정되어있지만, 이 함수는 반환하지 않는다.
사용자가 홈 버튼을 눌러 iOS앱을 종료하면 애플리케이션이 백그라운드로 이동한다.
또한, 파라미터명에서 볼 수 있듯 Class에서만 사용가능하다.

앱 실행 과정(object-c)

  1. 앱이 실행되면서 맨 처음 main()함수가 실행된다.
  2. main()함수는 UIApplicationMain()함수를 호출한다.
  3. UIApplicationMain() 함수가 UIApplication 객체 및 Delegate 객체
    를 생성
    한다. 이 객체는 앱의 본체에 해당한다.
  4. UIApplication 객체는 info.plist 파일로부터 앱 구성에 필요한 정보들을 로드한다.
  5. 이벤트 루프 및 초기 설정을 진행한다.
  6. 실행 완료 직전에 App Delegate의 application(_:didFinishLaunchingWithOptions:) 메소드가 호출된다.

Swift는 main함수가 없지만 @main이라는 어노테이션 표기가 있다. 이 표기를 통해서 object-c의 1-5과정이 대체된다.

@main

Swift기반으로된 iOS 프로젝트는 main파일이 없다.
@main을 선언하여 iOS앱의 진입점을 컴파일러가 지정하기 때문이다.
기존 @UIApplicationMain은 Swift5.3(Xcode12)이전에 사용되었고, 이후로는 @main 키워드가 사용되고 있다.
@main을 사용하면서 클래스 뿐만 아니라 구조체 등에서도 진입점을 잡을 수 있다.
main() 함수 자체가 타입 메서드이기에 프로토콜에서 extension 메서드 및 기본 클래스로 제공될 수 있다.
따라서, 원하는 곳에서 @main을 통해 진입점을 제공해줄 수 있다.

UIApplicationMain
@mainVS@UIApplicationMain(green)


Optional 이란 무엇인지 설명하시오.

: 래핑된 값 또는 값이 없는 nil을 나타내는 타입(열거형)이다.

Optional Binding

Optional 인스턴스의 래핑된 값을 새 변수에 조건부로 바인딩하려면 if let, guard letswitch를 비롯한 선택적 바인딩 제어 구조 중 하나를 사용한다.

Optional Chaining

래핑된 인스턴스의 속성과 메서드에 안전하게 액세스하려면 접미사 옵셔널 체이닝 연산자(후위 ?)를 사용한다. 다음 예제에서는 옵셔널 체이닝을 사용하여 String?의 hasSuffix(_:) 메서드에 액세스한다.

Nil-Coalescing

Optional 인스턴스가 nil인 경우 nil-coalescing 연산자(??)를 사용하여 기본값을 제공한다.

Unconditional Unwrapping

Optional의 인스턴스에 값이 포함되어 있다고 확신하는 경우 강제 언래핑 연산자(접미사 !)를 사용하여 값을 무조건 해제할 수 있다. !를 사용하여 강제 언래핑을 했을 때 nil 값일 경우 런타임 오류를 발생시킨다.

IBOutlet이 !인 이유
인터페이스 빌더와 뷰 컨트롤러의 로드되는 시점이 다르기 때문이다.
뷰 컨트롤러가 먼저 로드되기 때문에 스토리보드의 데이터가 로드되기 전에 값이 있을 것이라는 옵셔널 값으로 지정해준다.

Optional
IBOutlet 강제 언래핑


Struct 가 무엇이고 어떻게 사용하는지 설명하시오.

: 프로그램 코드의 빌딩 블록이 되는 유연한 범용 구조이다.

사용자 정의 타입

  • 값을 저장하는 프로퍼티 정의
  • 기능을 제공하는 메서드 정의
  • . 를 사용하여 값에 접근
  • 초기화를 위한 이니셜라이저 정의
  • extension을 통해 기능 확장
  • 프로토콜 준수

특징

  • 값 타입으로 힙 영역에 저장된다.
  • immutable한 성질을 갖고 있어 프로퍼티의 값을 변경할 경우 mutable 키워드를 붙여준다.
  • 자동으로 생성되는 멤버별 이니셜라이저가 존재한다.
  • 인스턴스를 let으로 설정할 경우 인스턴스 내부의 변수는 변경 불가능하다.

Struct Class

profile
iOS 꿈나무 개발자
post-custom-banner

0개의 댓글