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

Groot·2022년 11월 12일
0

TIL

목록 보기
97/153
post-thumbnail
post-custom-banner

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 면접스터디

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

  • sharedApplication을 사용하여 액세스하는 싱글톤 UIApplication 객체를 생성
  • UIApplication 객체는 앱의 메인 이벤트 루프를 실행하고 앱의 전체 수명 주기를 관리
  • UIApplication 객체는 앱 실행, 메모리 부족 경고 및 앱 종료와 같은 중요한 런타임 이벤트를 Delegate에게 알려 적절하게 대응할 수 있는 기회를 제공
  • UIApplication 클래스는 UIApplicationDelegate 프로토콜을 준수하고 프로토콜의 일부 메서드를 구현해야 하는 대리자를 정의

🔗 앱 시작 시 main() -> UIApplicationMain 함수의 흐름 설명

  1. 시스템은 Xcode가 제공하는 main() 함수를 실행
  2. main() 함수는 UIApplicationMain을 호출
    • 정수 반환 유형이 지정되어도 이 함수는 반환하지 않습니다.
    • 응용 프로그램 개체를 인스턴스화
    • 클래스에서 대리자(있는 경우)를 인스턴스화, 응용 프로그램에 대한 대리자를 설정
    • 애플리케이션의 런 루프를 포함하여 메인 이벤트 루프를 설정하고 이벤트 처리를 시작(UIApplication)
    • nib 파일을 로드
  3. UIApplication 및 앱 대리자의 인스턴스를 생성
  4. UIKit은 앱의 Info.plist 파일이나 Xcode 프로젝트 편집기의 대상 사용자 지정 iOS 대상 속성 탭에서 지정한 기본 스토리보드를 로드, 스토리보드가 없으면 건너뜀
  5. UIKit은 AppDelegate에서 application:willFinishLaunchingWithOptions: 메서드를 호출합니다.
    • Delegate에게 실행 프로세스가 거의 완료되었으며 앱을 실행할 준비가 거의 완료되었음을 알림.
    • 특정 이유로 시스템에서 앱을 시작한 경우 launchOptions Dictionary에는 시작 이유를 나타내는 데이터가 포함.
    • 이 메서드가 호출될 때 앱은 inactive 상태.
  • 초기 실행

  • 앱 실행과 종료 과정

🔗 Event Loop

🔗 전체적인 Delegate 호출 메서드 순서

  • Launch time
    1. application: didFinishLaunchingWithOptions: -> Bool
      • 이 콜백 메소드는 애플리케이션이 실행을 완료하고 상태를 복원할 때 호출, UI 생성과 같은 최종 초기화를 수행.
    2. applicationWillEnterForeground
      • 전화를 받거나 기타 시스템이 중단된 후 앱이 다시 활성화 될때 실행.
    3. applicationDidBecomeActive
      • Foreground로의 전환이 완료된 후 실행.
  • Termination time
    1. applicationWillResignActive
      • 앱이 비활성화되려고 할 때 호출(예: 전화가 걸려오거나 사용자가 홈 버튼을 눌렀을 때).
    2. applicationDidEnterBackground
      • 앱이 비활성화된 후 백그라운드 상태가 될 때 호출. 나중에 또는 그 직후 앱이 종료되는 경우에 대비하여 백업해야 하는 작업을 실행하는 데 약 5초가 주어진다.
    3. applicationWillTerminate
      • 앱이 메모리에서 제거될 때 호출.

🔗 App 기반 Life Cycle

🔗 @main

  • @main은 프로그램 실행 시작 시 진입점으로 타입을 지정하기 위한 Swift 언어의 기능이다. 사용자는 탑 레벨의 코드를 작성하는 대신 @main단일 유형의 속성을 사용할 수 있고, 라이브러리와 프레임워크는 프로토콜이나 클래스 상속을 통해 맞춤형 진입점 동작을 제공할 수 있다.

  • @main은 어디서부터 이 앱이 최초 실행되고 시작될지를 명시해주는 키워드(UIKit프레임워크에 존재하는 main() 함수를 사용한다는 의미)

  • 꼬리질문
    - application 설명.
    - UIApplication의 동작 흐름

    • App기반 Life Cycle

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

@frozen enum Optional<Wrapped>
  • 값이 있을수도 없을수도 있는 타입(enum)
  • Optional.none은 nil 리터럴과 동일.
  • Optional.some(Wrapped)은 래핑된 값.
  • Swift의 옵셔널을 사용하면 특별한 상수 없이도 모든 유형에 대한 값이 없음을 나타낼 수 있다.

🔗 UnWrapping

  • Implicitly Unwrapped Optionals
    • 옵션으로 만들려는 유형 뒤에 물음표(문자열?) 대신 느낌표(문자열!)를 배치하여 암시적으로 래핑되지 않은 옵션을 작성.
  • !를 사용해 강제로
  • nil-coalescing 연산자(??)를 사용하여 기본값을 제공.
  • 옵셔널 바인딩을 사용하여 옵셔널에 값이 포함되어 있는지 확인하고, 그렇다면 해당 값을 임시 상수나 변수로 사용할 수 있도록 합니다
    • if let
    • while let
    • guard let
  • 옵셔널 체이닝은 하위 property에 optional 값이 있는지 연속적으로 확인하면서, 중간에 하나라도 nil이 발견된다면 nil이 반환되는 형식

🔗 IBOutlet, Action

  • 인터페이스 빌더 데이터는 뷰 컨트롤러가 시작된 후에 로드되므로 콘센트는 초기화 후에 값을 바로 연결할 수 없습니다.
  • 초기화 후에만 연결되므로 선택 사항이어야 합니다.
  • 그러나 초기화 후에 클래스의 다른 코드가 호출되면 이러한 콘센트가 연결되는 것이 보장됩니다.
  • 암시적으로 래핑되지 않은 선택적 속성(이 경우 콘센트)을 사용하면 개체가 시작된 후 속성이 nil이 될 수 있지만 해당 값은 나중에 할당됩니다(nib 또는 스토리보드 로드 후).
  • 꼬리질문
    • Optional은 어떤 타입으로 이루어져있는지?
    • Optional은 어떤 케이스
    • 언래핑의 방법
    • Optional를 사용했을 때 장점
    • UIKit에서 Optional을 기본적으로 사용하고 있는 예
      • IBOutlet, Action에서 암시적 옵셔널을 사용하는 이유

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

  • 값 타입
    • 기본적인 값 타입은 Stack에 실제 데이터가 저장된다. 그렇기 때문에 let으로 선언 시 수정이 불가능하다.
    • 참조는 데이터를 힙에 저장하고 스택에는 그 주소값을 저장한다. 그렇기 때문에 let으로 선언해도 데이터 변경은 가능하다.
  • 자동으로 생성된 멤버별 이니셜라이저 존재
  • 값 유형은 변수나 상수에 할당되거나 함수에 전달될 때 값이 복사되는 유형 (arrays, dictionaries, and strings : COW)

🔗 기능

  • 값을 저장할 속성 정의
  • 기능을 제공하는 메소드 정의
  • subscripts syntax를 사용하여 값에 대한 액세스를 제공하도록 subscripts를 정의합니다.
  • 초기 상태를 설정하기 위한 이니셜라이저 정의
  • 기본 구현 이상으로 기능을 확장하도록 extension
  • 특정 종류의 표준 기능을 제공하는 protocol 준수

🔗 Mutating

  • 기본적으로 값 유형의 속성은 인스턴스 메서드 내에서 수정할 수 없다.
  • Mutating 키워드를 붙이면 메서드 내에서 속성을 변경(즉, 변경)할 수 있으며 변경 사항은 메서드가 종료될 때 원래 struct에 다시 기록
  • 암시적 self 속성에 완전히 새로운 인스턴스를 할당할 수도 있으며 이 새 인스턴스는 메서드가 종료되면 기존 인스턴스를 대체
  • 꼬리질문
    • Struct의 특징
    • class보다 struct를 지향하는 이유
    • Mutating의 설명
    • let과 var
profile
I Am Groot
post-custom-banner

0개의 댓글