1. iOS 앱에서 Core Data를 사용한 데이터 마이그레이션(Migration)에 대해 설명해주세요.

    1. 경량 마이그레이션(Lightweight Migration)과 무거운 마이그레이션(Heavyweight Migration)의 차이점은 무엇인가요?
      • 자동화 여부
        • 경량 마이그레이션: Core Data에 의해 자동으로 처리
        • 무거운 마이그레이션: 개발자가 직접 매핑 모델과 마이그레이션 코드 작성
      • 적용 가능한 변경 범위
        • 경량 마이그레이션: 간단한 모델 변경에 적용
        • 무거운 마이그레이션: 복잡한 변경
      • 구현 복잡도
        • 경량 마이그레이션: 구현이 간단함
        • 무거운 마이그레이션: 구현이 복잡하며 더 많은 개발 노력이 필요함
    2. 매핑 모델(Mapping Model)을 사용하여 데이터를 마이그레이션하는 방법을 설명해주세요.
      • 매핑 모델 생성
        • 엔티티에 대한 매핑 규칙 정의
      • 매핑 로직 정의
        1. 엔티티 매핑
          • 엔티티 매핑을 선택하고 소스 엔티티와 대상 엔티티를 설정
          • 매핑된 엔티티간에 데이터가 어떻게 이동할지 정의
        2. 속성 매핑
          • 각 속성에 대한 소스 속성과 대상 속성을 설정
          • 변환이 필요한 경우 ‘value expression’을 사용하여 변환 로직을 정의할 수 있음
        3. 관계 매핑
          • 관계 매핑과 속성 매핑과 유사하게 소스 관계와 대상 관계를 설정
          • 관계가 어떻게 변환되는지에 대한 로직을 정의
      • 마이그레이션 프로세스
        • 마이그레이션 매니저 설정
        • 마이그레이션 수행
    3. 데이터 마이그레이션 중 발생할 수 있는 문제와 해결 방법은 무엇인가요?
      • 데이터 손실
        • 문제
          • 필드 삭제, 데이터 타입변경, 잘못된 매핑 로직으로 인한 데이터 손실
        • 해결 방법
          • 마이그레이션을 수행하기 전 데이터 백업
          • 개발 환경에서 충분한 테스트를 진행하여 마이그레이션 프로세스 검증
          • 데이터 변환 시, 데이터 손실을 방지하기 위한 매핑 로직 신중하게 설계
      • 성능
        • 문제
          • 대규모 데이터 세트에 대한 마이그레이션은 성능 저하를 일으킬 수 있으며, 사용자 경험에 부정적인 영향을 줄 수 있음
        • 해결 방법
          • 마이그레이션 작업을 백그라운드 스레드에서 진행
          • 가능한 경우, 데이터를 배치로 나누어 점진적 마이그레이션
          • 마이그레이션 로직을 최적화 하여 불필요한 연산 최소화
      • 사용자 인터페이스(UI) 동결
        • 문제
          • 마이그레이션 중 대규모 데이터 처리로 인해 UI가 동결되거나 반응이 없을 수도 있음
        • 해결 방법
          • 마이그레이션 작업을 백그라운드에서 비동기적으로 수행
          • 사용자에게 마이그레이션 진행 상황을 알리는 진행 상태 표시기 제공
      • 로깅과 오류 처리
        • 문제
          • 마이그레이션 중 발생하는 예상치 못한 오류를 추적하기 어려울 수 있음
        • 해결 방법
          • 로깅 시스템을 구현하여 마이그레이션 과정에서 발생하는 모든 중요한 이벤트와 오류를 기록
          • 마이그레이션 중 발생할 수 있는 예외를 적절히 처리하고, 필요한 경우 사용자에게 오류 메세지 표시
  2. iOS 앱의 낮은 메모리 상황 대응 방안과 관련 API에 대해 설명해주세요.

    1. 낮은 메모리 경고(Low Memory Warning)의 개념과 iOS에서의 동작 방식에 대해 설명해주세요.
      • 낮은 메모리 경고
        • iOS 시스템은 메모리 사용량을 지속적으로 모니터링하며, 사용 가능한 메모리가 특정 임계값 아래로 떨어지면 앱에 낮은 메모리 경고를 발생 시키는데, 이 경고는 앱이 사용중인 메모리 양을 줄이도록 요청하는 신호로, 앱이 이 경고에 반응하지 않으면, 시스템은 앱을 강제 종료할 수 있음
      • 동작방식
        • 메모리 경고 발생
          • 백그라운드 상태에 있는 앱들에 낮은 메모리 경고를 발생
        • 자동 메모리 정리
          • 대부분 앱은 자동으로 일부 메모리 해제(UIKit에서 자동으로 캐시된 이미지, 비활성화 된 뷰 컨트롤러의 뷰, 기타 재사용 가능 리소스를 정리
        • 개발자 대응
          • didReceiveMemoryWarning 메서드를 오버라이드하거나, NotificationCenter 를 통해 메모리 경고를 감지하고, 추가적 메모리 해제 작업을 수행
        • 강제 종료 방지
    2. didReceiveMemoryWarning() 메서드의 역할과 구현 방법에 대해 설명해주세요.
    3. 낮은 메모리 상황에서 앱의 안정성을 유지하기 위한 리소스 관리 전략에 대해 설명해주세요.
  3. Swift의 메타타입(Metatype)과 미러(Mirror)에 대해 설명해주세요.

  4. iOS 앱에서 바이너리 프레임워크(Binary Framework)를 생성하고 사용하는 방법은 무엇인가요?

  5. Combine 프레임워크에서 에러 처리는 어떻게 하나요?

  6. Swift의 동적 멤버 조회(Dynamic Member Lookup)에 대해 설명해주세요.

  7. Swift의 Property Wrapper에 대해 설명해주세요.

  8. iOS 앱에서 Siri Shortcuts을 구현하는 방법은 무엇인가요?

  9. Swift의 unsafe 포인터(Unsafe Pointer)에 대해 설명해주세요.

  10. Swift의 reflection에 대해 설명해주세요.

  11. iOS 앱에서 Keychain을 사용하여 민감한 데이터를 안전하게 저장하는 방법은 무엇인가요?

  12. Swift의 async/await를 사용한 비동기 프로그래밍에 대해 설명해주세요.

  13. iOS 앱에서 WidgetKit을 사용하여 홈 화면 위젯을 구현하는 방법은 무엇인가요?

  14. MVVM-C(Coordinator) 아키텍처 패턴에 대해 설명해주세요.

  15. Swift의 @dynamicCallable과 @dynamicMemberLookup에 대해 설명해주세요.

  16. Swift의 ABI(Application Binary Interface) 안정성에 대해 설명해주세요.

  17. iOS 앱에서 Combine 프레임워크를 활용한 반응형 프로그래밍 패턴에 대해 설명해주세요.

  18. Swift의 런타임 동작과 성능 최적화 기법에 대해 설명해주세요.

  19. iOS 앱의 접근성(Accessibility)을 향상시키기 위한 방법과 고려 사항에 대해 설명해주세요.

  20. iOS 앱에서 Objective-C 브리징(Bridging)을 하는 방법과 주의 사항을 설명해주세요.