1. Swift에서 옵셔널이란 무엇이며, 언제 사용해야 하나요?

    1. 옵셔널 바인딩과 강제 언래핑의 차이점은 무엇인가요?

      • 옵셔널 바인딩: if let, guard let을 사용하여 옵셔널에 값이 있는지 확인하고 값이 있을 경우 임시 상수에 할당하여 사용
      • 옵셔널 값 뒤에 !를 붙여 해당 값이 nil이 아님을 확신할 때 사용. nil일 경우 런타임 에러가 발생
    2. 옵셔널 체이닝의 동작 원리를 설명해주세요.

      • 옵셔널 값을 포함하는 프로퍼티, 메서드, 서브스크립션 등에 접근할 때 사용되는 방법으로 과정 중 어느 한 곳에서라도 nil을 만나면 전체 표현식이 즉시 nil로 판단되어 코드 실행을 중단함
      • 첫번째 옵셔널 값에 ?를 붙여 해당 값이 nil인지 확인하고, nil이 아니면, 이어지는 프로퍼티, 메서드, 서브스크립션 호출은 언래핑된 값에 대해 실행.
    3. 암시적 언래핑 옵셔널을 사용하는 경우는 언제인가요?

      • 인터페이스 빌더 아웃렛, 초기화 이후 nil이 아닌 것이 보장되는 경우
    4. nil 병합 연산자(??)의 사용 예시를 들어주세요.

      var userName: String? = nil
      let displayName = userName ?? "Guest" // guest 출력
      
      var userName: String? = "John Doe"
      let displayName: userName ?? "Guest" // john doe 출력
      
  2. iOS 앱의 생명주기(App Life Cycle)에 대해 설명해주세요.

    1. 앱의 각 상태(Not Running, Inactive, Active, Background, Suspended)에서 할 수 있는 작업은 무엇인가요?
      • Not Running: 앱이 시작되지 않았거나 시스템에 의해 종료된 상태
      • Inactive: 앱이 포그라운드에 있지만, 현재 이벤트를 받지 않는 상태(전화가 오는 등의 인터럽트 발생시)
      • Active: 앱이 포그라운드에 있고 이벤트를 받고있음.
      • Background: 앱이 백그라운드에 있고 코드를 실행할 수 있음. 사용자에게는 보이지않지만, 작업을 계속 할수 있음.(데이터 저장, 네트워크 요청 마무리)
      • Suspended: 앱이 백그라운드에 있지만 코드를 실행할 수 없는 상태. 시스템은 메모리가 부족할 경우 중지 상태 앱을 종료시킴
    2. 앱 상태 변화에 따라 호출되는 AppDelegate 메서드들을 나열해주세요.
      • application(_:didFinishLaunchingWithOptions:): 앱이 시작 할 때
      • applicationDidBecomeActive(_:): 앱이 활성화 될 때
      • applicationDidEnterBackground(_:): 백그라운드로 전환될 때
      • applicationWillTerminate(_:): 앱이 종료될 때
    3. 백그라운드에서 작업을 완료하기 위한 방법들은 무엇이 있나요?
      • Background Fetch: 앱이 백그라운드에서 주기적으로 데이터를 업데이트 할 수 있도록 함
      • Background App Refresh: 최신 콘텐츠를 사용자에게 제공하기 위해 앱이 백그라운드에서 콘텐츠를 주기적으로 갱신함
      • 실시간 위치 업데이트: 위치 기반 서비스를 제공하는 앱이 사용자의 위치 변경을 백그라운드에서 계혹 추적함
      • Background Tasks API: iOS13이상에서 단기간의 백그라운드 작업(DB정리, 파일 업로드)을 위한 API
      • 백그라운드 VoIP: 앱이 백그라운드에서 VoIP푸시를 받음
  3. Storyboard와 XIB의 차이점은 무엇인가요?

    1. Storyboard에서 세그(Segue)를 사용하는 이유는 무엇인가요?
      • 시각적 흐름 구성:

        storyboard 내 뷰 컨트롤러 간의 전환 경로를 직접 볼 수 있어 앱의 전체적 네비게이션 흐름으 쉽게 파악하고 설계할 수 있음

      • 선언적 전환 정의:

        버튼 탭과 같은 이벤트가 발생했을 때 어떤 화면으로 전환될 지 storyboard에서 직접 설정할 수 있어 코드 양을 줄이고 네비게이션 로직을 더 명확하게 할 수 있음

      • 다양한 전환 스타일과 애니메이션 지원:

        코드를 추가하지 않고도 모달, 푸시, 팝오버 등 다양한 방식으로 화면전환 구현 가능

      • 전환 전 데이터 전달

        prepare(for:sender:) 메서드를 통해 뷰 컨트롤러 간 데이터를 쉽게 전달 가능

      • 개발 편의성 및 생산성 향상

    2. Storyboard 참조(Storyboard Reference)의 장점은 무엇인가요?
      • 모듈성과 재사용성 향상

        앱의 다양한 기능을 별도 storyboard로 나눔으로써 모듈성이 향상. 이는 특정 기능이나 화면을 다른 프로젝트에서 재사용하기 쉽게 만들어줌

      • 협업 용이

        여러 개발자가 동시에 작업할 때 서로 다른 storyboard 파일에서 독립적으로 작업할 수 있어 협업이 용이

      • 개선된 성능과 더 빠른 빌드 시간

        파일을 나누었기에 인터페이스 빌더를 로딩하고 렌더링하는 데 필요한 시간이 줄어듬

      • 앱의 구조 파악 용이

        앱의 다양한 기능을 별도의 storyboard로 구분함으로 앱의 전체 구조를 이해하기 쉬워짐

      • 유지보수성 향상

        특정 기능에 문제가 발생했을 때 해당 기능만을 포함하는 storyboard를 집중적으로 검토하고 수정할 수 있으므로 유지보수 과정을 간소화하고, 문제를 빠르게 해결할 수 있음

  4. 뷰를 구현할때 Storyboard와 Code로 구현하는 각각의 장단점은 무엇인가요?

    1. 선호하는 방식이 있다면 무엇이고 왜 더 선호하나요?
  5. Auto Layout을 사용하는 이유와 장점은 무엇인가요?

  6. Swift에서 클로저(Closure)란 무엇이며, 어떻게 사용하나요?

  7. iOS에서 델리게이트 패턴(Delegate Pattern)은 어떤 목적으로 사용되나요?

  8. Swift의 기본 데이터 타입에는 어떤 것들이 있나요?

  9. Xcode에서 디버깅 시 자주 사용하는 기능들은 무엇이 있나요?

  10. iOS 앱에서 데이터를 저장하는 방법에는 어떤 것들이 있나요?

  11. Swift에서 프로토콜(Protocol)이란 무엇이며, 어떻게 사용하나요?

  12. Swift의 접근 제어자(Access Control)에 대해 설명해주세요.

  13. iOS 앱에서 네트워크 통신을 하는 방법에는 어떤 것들이 있나요?

  14. Swift의 옵셔널과 관련된 함수에는 어떤 것들이 있나요?

  15. Git에서 브랜치(Branch)를 사용하는 이유와 장점은 무엇인가요?

  16. iOS 앱에서 코어 데이터(Core Data)를 사용하는 이유는 무엇인가요?

  17. Swift의 high-order functions에 대해 설명해주세요.

  18. Xcode에서 유용한 단축키와 생산성을 높이는 팁에 대해 설명해주세요.

  19. iOS 개발을 위한 라이브러리 관리 도구(CocoaPods, Carthage, Swift Package Manager)의 차이점과 사용법을 설명해주세요.

  20. iOS 앱에서 URL Scheme을 사용하여 다른 앱과 통신하는 방법과 주의 사항을 설명해주세요.