[iOS / macOS] Swift 면접 질문 2

2024. 12. 31. 23:56🍏/Others

문제 리스트 가져온 

 

GitHub - JeaSungLEE/iOSInterviewquestions: 👨🏻‍💻👩🏻‍💻iOS 면접에 나올 질문들 총 정리

👨🏻‍💻👩🏻‍💻iOS 면접에 나올 질문들 총 정리 . Contribute to JeaSungLEE/iOSInterviewquestions development by creating an account on GitHub.

github.com

 

레벨 2

  1. Swift의 동시성(Concurrency) 프로그래밍에 대해 설명해주세요.
    • Grand Central Dispatch(GCD)의 주요 개념과 사용 방법을 설명해주세요.
    • OperationQueue와 DispatchQueue의 차이점은 무엇인가요?
    • 동시성 프로그래밍에서 발생할 수 있는 문제(Race Condition, Deadlock 등)와 해결 방법은 무엇인가요?
  2. 객체지향 프로그래밍(OOP)의 주요 개념에 대해 설명해주세요.
    • 캡슐화(Encapsulation)와 정보 은닉(Information Hiding)의 차이점은 무엇인가요?
    • 상속(Inheritance)의 장단점은 무엇인가요?
    • 다형성(Polymorphism)을 활용하는 예시를 들어주세요.
  3. 프로토콜 지향 프로그래밍(POP)이란 무엇이며, 어떤 장점이 있나요?
    • 프로토콜 확장(Protocol Extension)을 사용하는 이유는 무엇인가요?
    • 프로토콜 컴포지션(Protocol Composition)은 어떤 경우에 사용하나요?
    • 프로토콜과 제네릭(Generic)을 함께 사용하면 어떤 이점이 있나요?
  4. iOS 앱의 메모리 관리는 어떻게 이루어지나요?
    • ARC(Automatic Reference Counting)의 동작 원리를 설명해주세요.
    • 강한 참조(Strong Reference)와 약한 참조(Weak Reference)의 차이점은 무엇인가요?
    • 순환 참조(Retain Cycle)가 발생하는 경우와 해결 방법을 설명해주세요.
    • 강한 참조, 약한 참조, 미소유 참조의 차이점을 설명해주세요.
  5. Swift의 문자열(String) 다루기와 관련된 주요 기능은 무엇이 있나요?
    • 서브스트링(Substring)과 문자열의 차이점은 무엇인가요?
    • 문자열 보간법(String Interpolation)을 사용하는 방법과 주의 사항을 설명해주세요.
    • 정규식(Regular Expression)을 사용하여 문자열을 다루는 방법을 설명해주세요.
  6. Codable 프로토콜은 무엇이며, 어떻게 사용하나요?
    • Encodable과 Decodable 프로토콜의 역할은 무엇인가요?
    • JSON 데이터를 커스텀 객체로 디코딩하는 방법을 설명해주세요.
    • Codable 프로토콜을 채택한 타입에서 인코딩/디코딩 키를 커스터마이징하는 방법은 무엇인가요?
  7. iOS 앱에서 의존성 주입(Dependency Injection)은 어떤 목적으로 사용되나요?
    • 의존성 주입의 세 가지 유형(Initializer Injection, Property Injection, Method Injection)을 설명해주세요.
    • 의존성 주입 컨테이너(Dependency Injection Container)란 무엇인가요?
    • 의존성 주입을 사용함으로써 얻을 수 있는 이점은 무엇인가요?
  8. 델리게이션 패턴(Delegation Pattern)과 클로저의 차이점은 무엇인가요?
    • 델리게이션 패턴에서 메모리 누수가 발생할 수 있는 경우와 해결 방법을 설명해주세요.
    • 클로저의 캡처 리스트(Capture List)는 어떤 역할을 하나요?
    • 델리게이션 패턴과 클로저를 함께 사용하는 경우의 장단점은 무엇인가요?
  9. UIKit에서 테이블 뷰(UITableView)와 컬렉션 뷰(UICollectionView)의 차이점은 무엇인가요?
    • 테이블 뷰와 컬렉션 뷰에서 셀을 재사용하는 이유와 방법을 설명해주세요.
    • 테이블 뷰와 컬렉션 뷰의 데이터 소스(Data Source)와 델리게이트(Delegate)의 역할은 무엇인가요?
    • 컬렉션 뷰에서 사용할 수 있는 레이아웃(Layout)의 종류와 특징을 설명해주세요.
  10. iOS 앱 아키텍처 패턴 중 MVC, MVVM, VIP, MVI의 차이점은 무엇인가요?
    • MVC의 장점은 무엇인가요?
    • 각 아키텍처 패턴의 구성 요소와 책임을 설명해주세요.
    • MVVM 패턴에서 Binding은 어떤 역할을 하나요?
    • VIP 패턴에서 Presenter의 역할은 무엇인가요?
    • MVI 패턴에서 Intent의 역할은 무엇인가요?
  11. Swift에서 옵셔널(Optional)을 사용할 때 주의할 점은 무엇인가요?
    • 강제 언래핑(Force Unwrapping)을 사용하면 안 되는 이유는 무엇인가요?
    • 옵셔널 바인딩(Optional Binding)과 옵셔널 체이닝(Optional Chaining)의 차이점을 설명해주세요.
    • 암시적 언래핑 옵셔널(Implicitly Unwrapped Optional)은 어떤 경우에 사용하나요?
  12. iOS 앱에서 코어 애니메이션(Core Animation)을 사용하는 방법은 무엇인가요?
    • CALayer의 주요 속성과 메서드를 설명해주세요.
    • 애니메이션 그룹(Animation Group)은 어떤 경우에 사용하나요?
    • 키 프레임 애니메이션(Keyframe Animation)과 스프링 애니메이션(Spring Animation)의 차이점은 무엇인가요?
  13. Swift에서 프로토콜 지향 프로그래밍(Protocol-Oriented Programming)을 활용하는 방법은 무엇인가요?
    • 프로토콜 확장(Protocol Extension)을 통해 기본 구현을 제공하는 방법을 설명해주세요.
    • 프로토콜 상속(Protocol Inheritance)은 어떤 경우에 사용하나요?
    • 프로토콜 지향 프로그래밍(Protocol-Oriented Programming)에서 제네릭(Generic)을 함께 사용하면 어떤 이점이 있나요?
  14. iOS 앱에서 네트워크 요청 시 응답 캐싱(Response Caching)을 하는 방법은 무엇인가요?
    • URLCache는 어떤 역할을 하나요?
    • 응답 캐싱의 장단점은 무엇인가요?
    • 응답 캐싱을 커스터마이징하는 방법을 설명해주세요.
  15. Combine 프레임워크란 무엇이며, 어떤 기능을 제공하나요?
    • Publisher와 Subscriber의 역할은 무엇인가요?
    • Operator의 종류와 사용 방법을 설명해주세요.
    • Combine과 RxSwift의 차이점은 무엇인가요?
  16. Swift의 제네릭(Generic)에 대해 설명해주세요.
    • 제네릭을 사용하는 이유는 무엇인가요?
    • 제네릭 타입 파라미터(Generic Type Parameter)와 제네릭 타입 제약(Generic Type Constraint)은 무엇인가요?
    • 제네릭을 사용할 때 주의할 점은 무엇인가요?
  17. iOS 앱에서 로컬 푸시 알림(Local Push Notification)을 구현하는 방법은 무엇인가요?
    • 로컬 푸시 알림과 원격 푸시 알림(Remote Push Notification)의 차이점은 무엇인가요?
    • 푸시 알림의 콘텐츠(Content)와 트리거(Trigger)는 어떤 역할을 하나요?
    • 사용자가 푸시 알림을 탭했을 때 앱의 동작을 처리하는 방법을 설명해주세요.
  18. iOS 앱에서 SwiftUI와 UIKit을 함께 사용하는 방법은 무엇인가요?
    • SwiftUI 뷰에서 UIKit 뷰 컨트롤러를 사용하는 방법을 설명해주세요.
    • UIKit 뷰 컨트롤러에서 SwiftUI 뷰를 호스팅하는 방법은 무엇인가요?
    • SwiftUI와 UIKit을 함께 사용할 때 주의할 점은 무엇인가요?
  19. Swift에서 키 경로(Key Path)란 무엇이며, 어떻게 사용하나요?
    • 키 경로 표현식(Key Path Expression)의 문법과 사용 예시를 설명해주세요.
    • 런타임에 키 경로를 사용하여 속성에 접근하는 방법은 무엇인가요?
    • 키 경로와 KVO(Key-Value Observing)의 관계를 설명해주세요.
  20. iOS 앱에서 Deep Link와 Universal Link의 차이점은 무엇인가요?
    • Deep Link를 구현하는 방법과 주의 사항을 설명해주세요.
    • Universal Link의 동작 원리와 설정 방법은 무엇인가요?
    • Deep Link와 Universal Link를 함께 사용하는 경우의 장점은 무엇인가요?
  21. Swift의 Result 타입과 에러 처리 방식에 대해 설명해주세요.
    • Result 타입을 사용하는 이유와 장점은 무엇인가요?
    • 에러 처리 시 do-catch 문과 Result 타입을 함께 사용하는 방법을 설명해주세요.
  22. iOS 앱에서 Thread Sanitizer를 사용하여 동시성 문제를 탐지하고 해결하는 방법을 설명해주세요.
  23. Swift의 Sequence와 Collection 프로토콜에 대해 설명해주세요.
    • Sequence와 Collection 프로토콜의 차이점과 요구 사항을 설명해주세요.
    • 사용자 정의 Sequence와 Collection을 구현하는 방법과 사용 예시를 들어주세요.
  24. UIKit의 AdaptiveLayout과 Size Classes에 대해 설명해주세요.
    • AdaptiveLayout의 개념과 사용 목적을 설명해주세요.
    • Size Classes를 활용하여 다양한 기기에 적응적인 UI를 구현하는 방법을 예시와 함께 설명해주세요.
  25. Swift의 커스텀 연산자(Custom Operator)에 대해 설명해주세요.
    • 커스텀 연산자를 정의하는 방법과 주의 사항은 무엇인가요?
    • 커스텀 연산자를 활용한 코드 가독성 향상 방안을 제시해주세요.
  26. Swift의 생성자(Initializer)와 관련된 고급 개념에 대해 설명해주세요.
    • 지정 생성자(Designated Initializer)와 편의 생성자(Convenience Initializer)의 차이점은 무엇인가요?
    • 필수 생성자(Required Initializer)와 실패 가능한 생성자(Failable Initializer)는 어떤 경우에 사용하나요?
  27. Combine 프레임워크에서 Scheduler의 역할과 종류에 대해 설명해주세요.
    • Scheduler를 사용하여 작업을 특정 큐(DispatchQueue)에서 실행하는 방법을 설명해주세요.
    • 백그라운드에서 작업을 수행하고 메인 큐에서 UI를 업데이트하는 패턴을 Combine으로 구현하는 방법을 설명해주세요.
  28. UIKit의 UIView는 클래스 기반으로 구현되어 있지만, SwiftUI에서 View 프로토콜을 준수하는 타입은 보통 구조체를 사용합니다. 그 이유는 무엇일까요?
    • View 프로토콜을 준수하는 구조체의 주요 특징은 무엇이며, 이는 어떻게 SwiftUI의 성능 및 사용성에 영향을 미치나요?
    • SwiftUI의 View가 구조체임에도 불구하고, 상태(state)를 어떻게 관리하고 업데이트하나요?
    • SwiftUI의 구조체 기반 View 생성과 업데이트 사이클은 어떻게 UIKit의 클래스 기반 UIView와 다른가요?