# 받은 질문 체크 --- ## 📚 목차 - [에릭](#에릭) - [솜](#솜) - [Essential Skills for iOS Developers](#Essential-Skills-for-iOS-Developers) --- ## 레벨 0 > 아래 내용이 어려우시다면 2020년이후 개정 된 [정보처리기사](https://namu.wiki/w/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC/%EC%8B%9C%ED%97%98/2020%EB%85%84%20%EA%B0%9C%EC%A0%95)를 공부하시는것을 추천합니다. - [x] 1. 컴퓨터 구조와 관련하여 CPU, RAM, 저장장치의 역할과 상호 작용에 대해 설명해주세요. - [x] 캐시 메모리의 개념과 종류, 역할에 대해 설명해주세요. - [x] CPU 아키텍처의 종류(예: ARM, x86)와 특징에 대해 설명해주세요. - [x] iOS 기기에서 사용되는 AP(Application Processor)의 특징과 역할에 대해 설명해주세요. - [ ] 2. 운영체제의 역할과 iOS에서의 운영체제 구조에 대해 설명해주세요. - [ ] 프로세스와 스레드의 차이점, iOS에서의 프로세스와 스레드 관리 방법에 대해 설명해주세요. - [ ] 메모리 관리 기법 중 iOS에서 사용되는 방식과 그 특징에 대해 설명해주세요. - [ ] iOS의 샌드박스(Sandbox) 개념과 역할, 앱 간 데이터 공유 방법에 대해 설명해주세요. 3. iOS에서의 메모리 구조와 관리 방식에 대해 자세히 설명해주세요. - iOS 앱의 메모리 구조(힙, 스택, 코드 영역 등)와 각 영역의 특징에 대해 설명해주세요. - 힙 영역에서 객체가 어떻게 할당되고 관리되는지 설명해주세요. - 스택 영역에서 함수 호출과 로컬 변수의 메모리 할당 및 해제 과정을 설명해주세요. 4. 네트워크 프로토콜 스택과 iOS에서의 네트워크 통신 방식에 대해 설명해주세요. - HTTP와 HTTPS의 차이점, iOS에서의 보안 통신 방법에 대해 설명해주세요. - TCP와 UDP의 차이점에 대해서 설명해 주세요. - 소켓 통신에 대해 설명해주세요. - REST API와 iOS에서의 네트워크 요청 및 응답 처리 방법에 대해 설명해주세요. - REST API에서 Method들의 차이점을 설명해주세요. - HTTP 상태 코드에 대해서 설명해주세요. 5. iOS에서 메모리 사이즈와 관련된 개념과 고려 사항에 대해 설명해주세요. - iOS 디바이스의 메모리 제약과 앱 메모리 제한에 대해 설명해주세요. - 메모리 워드(word) 크기와 데이터 정렬(alignment)이 메모리 액세스 성능에 미치는 영향에 대해 설명해주세요. - 포인터 크기(32비트, 64비트)에 따른 메모리 사용량 차이와 고려 사항에 대해 설명해주세요. - iOS 앱에서 대용량 데이터를 다룰 때 메모리 사이즈를 고려한 최적화 방안에 대해 설명해주세요. 6. 알고리즘의 시간 복잡도와 공간 복잡도의 개념, 빅오 표기법에 대해 설명해주세요. - 자주 사용되는 정렬 알고리즘(예: 퀵 정렬, 병합 정렬)의 동작 원리와 시간 복잡도를 설명해주세요. - 이진 탐색의 원리와 시간 복잡도에 대해 설명해주세요. - 다이나믹 프로그래밍(Dynamic Programming)의 개념을 설명해주세요. 7. 자료구조의 종류와 iOS 개발에서 자주 사용되는 자료구조에 대해 설명해주세요. - 배열, 연결 리스트, 스택, 큐의 특징과 iOS에서의 구현 방법을 설명해주세요. - 해시 테이블의 개념, 충돌 해결 방법을 설명해주세요. - 트리 자료구조의 종류(예: 이진 트리, 이진 탐색 트리, AVL 트리)을 설명해주세요. 8. 동시성 프로그래밍의 개념과 iOS에서의 동시성 처리 방식에 대해 설명해주세요. - 병렬 처리와 동시 처리의 차이, iOS에서의 멀티코어 활용 방안에 대해 설명해주세요. 9. 암호화와 보안의 기본 개념, iOS 앱 보안을 위한 방안에 대해 설명해주세요. - 대칭키 암호화와 비대칭키 암호화의 차이에 대해 설명해주세요. - 해시 함수의 개념과 활용 사례에 대해 설명해주세요. 10. 가상 메모리(Virtual Memory)의 개념과 동작 원리에 대해 설명해주세요. - 가상 메모리의 필요성과 장점에 대해 설명해주세요. - 페이징(Paging) 기법의 개념과 동작 원리, 페이지 테이블의 역할에 대해 설명해주세요. - 세그먼테이션(Segmentation) 기법의 개념과 페이징과의 차이점에 대해 설명해주세요. 11. iOS 앱의 메모리 사용량 최적화를 위한 방안과 고려 사항에 대해 설명해주세요. - 메모리 캐싱 기법(예: NSCache, 이미지 캐싱)의 개념과 iOS에서의 구현 방법을 설명해주세요. - 대용량 데이터(예: 이미지, 비디오) 처리 시 메모리 최적화 방안(예: lazy loading, 썸네일 활용)에 대해 설명해주세요. 12. 데이터베이스의 종류와 iOS에서 주로 사용되는 데이터베이스에 대해 설명해주세요. - iOS에서 사용되는 SQLite, Core Data, Realm 등의 특징과 사용 사례를 설명해주세요. - 관계형 데이터베이스의 ACID 특성과 트랜잭션의 개념에 대해 설명해주세요. - iOS에서 데이터베이스 스키마 버전 관리와 마이그레이션을 처리하는 방법을 설명해주세요. 13. iOS에서 자동 참조 카운팅(ARC)과 가비지 컬렉션(Garbage Collection)의 차이점에 대해 설명해주세요. - 가비지 컬렉션의 동작 원리와 장단점에 대해 설명해주세요. - iOS에서 가비지 컬렉션을 사용하지 않는 이유와 ARC를 선택한 배경에 대해 설명해주세요. 14. 싱글톤 패턴(Singleton Pattern)이란 무엇이며, 어떤 경우에 사용하나요? - 싱글톤 패턴의 장단점은 무엇인가요? - 싱글톤 객체의 초기화 방법과 접근 방법을 설명해주세요. - 싱글톤 패턴을 구현할 때 주의할 점은 무엇인가요? - Swift에서 싱글톤 패턴을 구현할때 멀티스레드에 대해서 어떻게 고려해야하나요? ## 레벨 1 1. Swift에서 옵셔널이란 무엇이며, 언제 사용해야 하나요? - 옵셔널 바인딩과 강제 언래핑의 차이점은 무엇인가요? - 옵셔널 체이닝의 동작 원리를 설명해주세요. - 암시적 언래핑 옵셔널을 사용하는 경우는 언제인가요? - nil 병합 연산자(??)의 사용 예시를 들어주세요. 2. iOS 앱의 생명주기(App Life Cycle)에 대해 설명해주세요. - 앱의 각 상태(Not Running, Inactive, Active, Background, Suspended)에서 할 수 있는 작업은 무엇인가요? - 앱 상태 변화에 따라 호출되는 AppDelegate 메서드들을 나열해주세요. - 백그라운드에서 작업을 완료하기 위한 방법들은 무엇이 있나요? 3. Storyboard와 XIB의 차이점은 무엇인가요? - Storyboard에서 세그(Segue)를 사용하는 이유는 무엇인가요? - Storyboard 참조(Storyboard Reference)의 장점은 무엇인가요? 4. 뷰를 구현할때 Storyboard와 Code로 구현하는 각각의 장단점은 무엇인가요? - 선호하는 방식이 있다면 무엇이고 왜 더 선호하나요? 5. Auto Layout을 사용하는 이유와 장점은 무엇인가요? - 제약 조건(Constraints)의 우선순위(Priority)는 어떤 역할을 하나요? - 스택 뷰(Stack View)의 속성들을 설명해주세요. - 인터페이스 빌더에서 제약 조건 충돌을 해결하는 방법은 무엇인가요? 6. Swift에서 클로저(Closure)란 무엇이며, 어떻게 사용하나요? - 클로저의 캡처 리스트(Capture List)는 어떤 역할을 하나요? - @escaping 클로저와 non-escaping 클로저의 차이점은 무엇인가요? - 트레일링 클로저(Trailing Closure) 문법은 언제 사용하면 좋나요? 7. iOS에서 델리게이트 패턴(Delegate Pattern)은 어떤 목적으로 사용되나요? - 델리게이트 패턴과 콜백 함수의 차이점은 무엇인가요? - 델리게이트 패턴과 옵저버 패턴의 차이점은 무엇이고 각각 어떨때 사용하면 좋나요? - 델리게이트 메서드에서 반환값을 사용하는 경우는 언제인가요? 8. Swift의 기본 데이터 타입에는 어떤 것들이 있나요? - 값 타입(Value Type)과 참조 타입(Reference Type)의 차이점을 설명해주세요. - 구조체(Struct)와 클래스(Class)는 어떤 차이가 있나요? - 열거형(Enum)의 원시값(Raw Value)과 연관값(Associated Value)은 무엇인가요? 9. Xcode에서 디버깅 시 자주 사용하는 기능들은 무엇이 있나요? - 중단점(Breakpoint)의 종류와 사용 방법을 설명해주세요. - LLDB 콘솔에서 자주 사용하는 명령어는 무엇인가요? - 조건부 중단점(Conditional Breakpoint)은 어떤 경우에 사용하면 좋나요? 10. iOS 앱에서 데이터를 저장하는 방법에는 어떤 것들이 있나요? - UserDefaults의 사용 예시와 주의 사항을 설명해주세요. - Keychain은 어떤 데이터를 저장하는 데 적합한가요? - Core Data와 SQLite의 차이점은 무엇인가요? 11. Swift에서 프로토콜(Protocol)이란 무엇이며, 어떻게 사용하나요? - 프로토콜의 요구 사항에는 어떤 것들이 있나요? - 프로토콜 확장(Protocol Extension)을 사용하는 이유는 무엇인가요? - 프로토콜 지향 프로그래밍(Protocol-Oriented Programming)의 장점은 무엇인가요? 12. Swift의 접근 제어자(Access Control)에 대해 설명해주세요. - open과 public의 차이점은 무엇인가요? - 접근 제어자를 사용하는 이유는 무엇인가요? - 상속과 관련된 접근 제어자는 무엇이 있나요? 13. iOS 앱에서 네트워크 통신을 하는 방법에는 어떤 것들이 있나요? - URLSession의 주요 구성 요소를 설명해주세요. - 네트워크 요청 시 에러 처리는 어떻게 하나요? - Alamofire와 같은 서드파티 라이브러리를 사용하는 이유는 무엇인가요? 14. Swift의 옵셔널과 관련된 함수에는 어떤 것들이 있나요? - map()과 flatMap()의 차이점을 설명해주세요. - compactMap()은 어떤 경우에 사용하나요? - 옵셔널 체이닝을 사용할 때 주의할 점은 무엇인가요? 15. Git에서 브랜치(Branch)를 사용하는 이유와 장점은 무엇인가요? - 브랜치를 병합(Merge)하는 방법에는 어떤 것들이 있나요? - 브랜치 전략(Git-Flow, GitHub-Flow 등)에 대해 설명해주세요. - 브랜치 충돌(Conflict) 해결 방법을 설명해주세요. 16. iOS 앱에서 코어 데이터(Core Data)를 사용하는 이유는 무엇인가요? - 코어 데이터의 주요 구성 요소(Entity, Attribute, Relationship 등)를 설명해주세요. - 코어 데이터에서 데이터를 가져오는 방법(Fetch Request)에 대해 설명해주세요. - 코어 데이터 마이그레이션(Migration)은 언제 필요한가요? 17. Swift의 high-order functions에 대해 설명해주세요. - map()과 compactMap()의 차이점은 무엇인가요? - filter()와 reduce()는 어떤 경우에 사용하나요? - flatMap()을 사용하는 경우를 예시로 들어주세요. 18. Xcode에서 유용한 단축키와 생산성을 높이는 팁에 대해 설명해주세요. 19. iOS 개발을 위한 라이브러리 관리 도구(CocoaPods, Carthage, Swift Package Manager)의 차이점과 사용법을 설명해주세요. - 각 도구의 장단점은 무엇인가요? 20. iOS 앱에서 URL Scheme을 사용하여 다른 앱과 통신하는 방법과 주의 사항을 설명해주세요. 21. Xcode의 인스트루먼트(Instruments)를 활용하여 앱의 성능을 분석하고 최적화하는 방법은 무엇인가요? - Xcode의 디버깅 도구(Breakpoints, Logging 등)를 활용하여 효과적으로 디버깅하는 방법을 소개해주세요. - 타임 프로파일러(Time Profiler)를 사용하여 앱의 병목 현상을 찾는 방법을 설명해주세요. - 얼로케이션 프로파일러(Allocations Profiler)를 사용하여 메모리 사용량을 분석하는 방법은 무엇인가요? - 레이아웃 디버깅(Layout Debugging)을 통해 오토레이아웃 문제를 해결하는 방법을 설명해주세요. 22. Swift에서 Any와 AnyObject의 차이점은 무엇인가요? 23. iOS 앱에서 NotificationCenter를 사용하는 목적과 사용 방법을 설명해주세요. ## 레벨 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)가 발생하는 경우와 해결 방법을 설명해주세요. - 강한 참조, 약한 참조, 미소유 참조의 차이점을 설명해주세요. 6. Swift의 문자열(String) 다루기와 관련된 주요 기능은 무엇이 있나요? - 서브스트링(Substring)과 문자열의 차이점은 무엇인가요? - 문자열 보간법(String Interpolation)을 사용하는 방법과 주의 사항을 설명해주세요. - 정규식(Regular Expression)을 사용하여 문자열을 다루는 방법을 설명해주세요. 7. Codable 프로토콜은 무엇이며, 어떻게 사용하나요? - Encodable과 Decodable 프로토콜의 역할은 무엇인가요? - JSON 데이터를 커스텀 객체로 디코딩하는 방법을 설명해주세요. - Codable 프로토콜을 채택한 타입에서 인코딩/디코딩 키를 커스터마이징하는 방법은 무엇인가요? 8. iOS 앱에서 의존성 주입(Dependency Injection)은 어떤 목적으로 사용되나요? - 의존성 주입의 세 가지 유형(Initializer Injection, Property Injection, Method Injection)을 설명해주세요. - 의존성 주입 컨테이너(Dependency Injection Container)란 무엇인가요? - 의존성 주입을 사용함으로써 얻을 수 있는 이점은 무엇인가요? 9. 델리게이션 패턴(Delegation Pattern)과 클로저의 차이점은 무엇인가요? - 델리게이션 패턴에서 메모리 누수가 발생할 수 있는 경우와 해결 방법을 설명해주세요. - 클로저의 캡처 리스트(Capture List)는 어떤 역할을 하나요? - 델리게이션 패턴과 클로저를 함께 사용하는 경우의 장단점은 무엇인가요? 10. UIKit에서 테이블 뷰(UITableView)와 컬렉션 뷰(UICollectionView)의 차이점은 무엇인가요? - 테이블 뷰와 컬렉션 뷰에서 셀을 재사용하는 이유와 방법을 설명해주세요. - 테이블 뷰와 컬렉션 뷰의 데이터 소스(Data Source)와 델리게이트(Delegate)의 역할은 무엇인가요? - 컬렉션 뷰에서 사용할 수 있는 레이아웃(Layout)의 종류와 특징을 설명해주세요. 11. iOS 앱 아키텍처 패턴 중 MVC, MVVM, VIP, MVI의 차이점은 무엇인가요? - MVC의 장점은 무엇인가요? - 각 아키텍처 패턴의 구성 요소와 책임을 설명해주세요. - MVVM 패턴에서 Binding은 어떤 역할을 하나요? - VIP 패턴에서 Presenter의 역할은 무엇인가요? - MVI 패턴에서 Intent의 역할은 무엇인가요? 12. Swift에서 옵셔널(Optional)을 사용할 때 주의할 점은 무엇인가요? - 강제 언래핑(Force Unwrapping)을 사용하면 안 되는 이유는 무엇인가요? - 옵셔널 바인딩(Optional Binding)과 옵셔널 체이닝(Optional Chaining)의 차이점을 설명해주세요. - 암시적 언래핑 옵셔널(Implicitly Unwrapped Optional)은 어떤 경우에 사용하나요? 13. iOS 앱에서 코어 애니메이션(Core Animation)을 사용하는 방법은 무엇인가요? - CALayer의 주요 속성과 메서드를 설명해주세요. - 애니메이션 그룹(Animation Group)은 어떤 경우에 사용하나요? - 키 프레임 애니메이션(Keyframe Animation)과 스프링 애니메이션(Spring Animation)의 차이점은 무엇인가요? 14. Swift에서 프로토콜 지향 프로그래밍(Protocol-Oriented Programming)을 활용하는 방법은 무엇인가요? - 프로토콜 확장(Protocol Extension)을 통해 기본 구현을 제공하는 방법을 설명해주세요. - 프로토콜 상속(Protocol Inheritance)은 어떤 경우에 사용하나요? - 프로토콜 지향 프로그래밍(Protocol-Oriented Programming)에서 제네릭(Generic)을 함께 사용하면 어떤 이점이 있나요? 15. iOS 앱에서 네트워크 요청 시 응답 캐싱(Response Caching)을 하는 방법은 무엇인가요? - URLCache는 어떤 역할을 하나요? - 응답 캐싱의 장단점은 무엇인가요? - 응답 캐싱을 커스터마이징하는 방법을 설명해주세요. 16. Combine 프레임워크란 무엇이며, 어떤 기능을 제공하나요? - Publisher와 Subscriber의 역할은 무엇인가요? - Operator의 종류와 사용 방법을 설명해주세요. - Combine과 RxSwift의 차이점은 무엇인가요? 17. Swift의 제네릭(Generic)에 대해 설명해주세요. - 제네릭을 사용하는 이유는 무엇인가요? - 제네릭 타입 파라미터(Generic Type Parameter)와 제네릭 타입 제약(Generic Type Constraint)은 무엇인가요? - 제네릭을 사용할 때 주의할 점은 무엇인가요? 18. iOS 앱에서 로컬 푸시 알림(Local Push Notification)을 구현하는 방법은 무엇인가요? - 로컬 푸시 알림과 원격 푸시 알림(Remote Push Notification)의 차이점은 무엇인가요? - 푸시 알림의 콘텐츠(Content)와 트리거(Trigger)는 어떤 역할을 하나요? - 사용자가 푸시 알림을 탭했을 때 앱의 동작을 처리하는 방법을 설명해주세요. 19. 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`와 다른가요? ## 레벨 3 1. iOS 앱에서 Core Data를 사용한 데이터 마이그레이션(Migration)에 대해 설명해주세요. - 경량 마이그레이션(Lightweight Migration)과 무거운 마이그레이션(Heavyweight Migration)의 차이점은 무엇인가요? - 매핑 모델(Mapping Model)을 사용하여 데이터를 마이그레이션하는 방법을 설명해주세요. - 데이터 마이그레이션 중 발생할 수 있는 문제와 해결 방법은 무엇인가요? 2. iOS 앱의 낮은 메모리 상황 대응 방안과 관련 API에 대해 설명해주세요. - 낮은 메모리 경고(Low Memory Warning)의 개념과 iOS에서의 동작 방식에 대해 설명해주세요. - didReceiveMemoryWarning() 메서드의 역할과 구현 방법에 대해 설명해주세요. - 낮은 메모리 상황에서 앱의 안정성을 유지하기 위한 리소스 관리 전략에 대해 설명해주세요. 3. Swift의 메타타입(Metatype)과 미러(Mirror)에 대해 설명해주세요. - 메타타입을 사용하여 타입 정보에 접근하는 방법은 무엇인가요? - 미러를 사용하여 객체의 속성을 동적으로 탐색하는 방법을 설명해주세요. - 메타타입과 미러를 활용한 실제 사용 사례를 들어주세요. 4. iOS 앱에서 바이너리 프레임워크(Binary Framework)를 생성하고 사용하는 방법은 무엇인가요? - 바이너리 프레임워크와 소스 코드 프레임워크의 차이점은 무엇인가요? - 바이너리 프레임워크를 생성할 때 고려해야 할 사항은 무엇인가요? - 바이너리 프레임워크를 배포하고 버전 관리하는 방법을 설명해주세요. 5. Combine 프레임워크에서 에러 처리는 어떻게 하나요? - 에러 이벤트를 처리하기 위한 Operator에는 어떤 것들이 있나요? - 에러 이벤트 발생 시 Subscription을 자동으로 취소하는 방법은 무엇인가요? - Combine과 Result 타입을 함께 사용하여 에러 처리를 하는 방법을 설명해주세요. 6. Swift의 동적 멤버 조회(Dynamic Member Lookup)에 대해 설명해주세요. - @dynamicMemberLookup 속성의 역할과 사용 방법은 무엇인가요? - 서브스크립트(Subscript)를 사용하여 동적 멤버 조회를 구현하는 방법을 설명해주세요. - 동적 멤버 조회를 활용한 실제 사용 사례를 들어주세요. 7. Swift의 Property Wrapper에 대해 설명해주세요. - Property Wrapper를 사용하는 이유와 장점은 무엇인가요? - @State, @Binding, @ObservedObject 등의 Property Wrapper의 차이점과 사용 방법을 설명해주세요. - Custom Property Wrapper를 만드는 방법과 사용 예시를 들어주세요. 8. iOS 앱에서 Siri Shortcuts을 구현하는 방법은 무엇인가요? - Siri Shortcuts의 동작 원리와 사용 사례를 설명해주세요. - NSUserActivity와 Intents Framework를 사용하여 Siri Shortcuts을 구현하는 방법을 설명해주세요. - Siri Shortcuts을 사용자 정의하고 파라미터를 전달하는 방법은 무엇인가요? 9. Swift의 unsafe 포인터(Unsafe Pointer)에 대해 설명해주세요. - UnsafePointer, UnsafeMutablePointer, UnsafeRawPointer의 차이점과 사용 방법은 무엇인가요? - unsafe 포인터를 사용할 때 주의해야 할 점은 무엇인가요? - unsafe 포인터를 사용하여 C 언어 라이브러리와 상호작용하는 방법을 설명해주세요. 10. Swift의 reflection에 대해 설명해주세요. - Mirror 타입을 사용하여 객체의 속성을 동적으로 탐색하는 방법은 무엇인가요? - 런타임에 타입 정보를 검사하고 메서드를 호출하는 방법을 설명해주세요. - reflection을 사용할 때 주의해야 할 점과 성능 고려 사항은 무엇인가요? 11. iOS 앱에서 Keychain을 사용하여 민감한 데이터를 안전하게 저장하는 방법은 무엇인가요? - Keychain Services API를 사용하여 데이터를 저장하고 읽어오는 과정을 설명해주세요. - Keychain Access Groups를 사용하여 앱 간에 데이터를 공유하는 방법은 무엇인가요? - Keychain의 접근 제어(Access Control) 옵션과 사용 방법을 설명해주세요. 12. Swift의 async/await를 사용한 비동기 프로그래밍에 대해 설명해주세요. - async/await 문법의 동작 원리와 사용 방법은 무엇인가요? - Task와 TaskGroup을 사용하여 비동기 작업을 관리하는 방법을 설명해주세요. - 비동기 시퀀스(AsyncSequence)와 비동기 스트림(AsyncStream)의 차이점과 사용 예시를 들어주세요. 13. iOS 앱에서 WidgetKit을 사용하여 홈 화면 위젯을 구현하는 방법은 무엇인가요? - 위젯의 생명주기(Life Cycle)와 업데이트 방식을 설명해주세요. - SwiftUI를 사용하여 위젯의 UI를 구성하는 방법과 주의 사항은 무엇인가요? - 위젯과 앱 간의 데이터 공유 및 통신 방법을 설명해주세요. 14. MVVM-C(Coordinator) 아키텍처 패턴에 대해 설명해주세요. - Coordinator의 역할과 구현 방법을 설명해주세요. - MVVM-C 패턴의 장단점과 적용 사례를 소개해주세요. 15. Swift의 @dynamicCallable과 @dynamicMemberLookup에 대해 설명해주세요. - @dynamicCallable을 사용하여 사용자 정의 호출 가능 타입을 만드는 방법과 사용 예시를 들어주세요. - @dynamicMemberLookup을 활용하여 동적으로 속성에 접근하는 방법과 실제 사용 사례를 소개해주세요. 16. Swift의 ABI(Application Binary Interface) 안정성에 대해 설명해주세요. - ABI 안정성의 개념과 중요성을 설명해주세요. - ABI 안정성이 프레임워크 개발과 배포에 미치는 영향을 설명해주세요. 17. iOS 앱에서 Combine 프레임워크를 활용한 반응형 프로그래밍 패턴에 대해 설명해주세요. - MVVM 아키텍처에서 Combine을 활용한 데이터 바인딩 방법을 예시와 함께 설명해주세요. - Combine과 SwiftUI를 함께 사용하여 선언적이고 반응형 UI를 구축하는 방법을 소개해주세요. 18. Swift의 런타임 동작과 성능 최적화 기법에 대해 설명해주세요. - Swift 런타임의 구조와 동작 방식을 설명해주세요. - 동적 디스패치, 인라이닝, 스택 프로모션 등 Swift 성능 최적화 기법과 컴파일러 최적화 옵션을 소개해주세요. 19. iOS 앱의 접근성(Accessibility)을 향상시키기 위한 방법과 고려 사항에 대해 설명해주세요. - VoiceOver, Switch Control 등 접근성 기술의 동작 원리와 지원 방법을 설명해주세요. - Dynamic Type, Bold Text 등 시각적 접근성 향상을 위한 기술과 구현 방법을 소개해주세요. - 접근성 테스트 및 심사 기준, 모범 사례 등을 예시와 함께 설명해주세요. 20. iOS 앱에서 Objective-C 브리징(Bridging)을 하는 방법과 주의 사항을 설명해주세요. ## 에릭 --- ### iOS - [x] Bounds 와 Frame 의 차이점을 설명하시오. - [x] 실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것을 설명하시오. - [x] 앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체를 무엇이라고 하는가? - [x] 앱 화면의 콘텐츠를 표시하는 로직과 관리를 담당하는 객체를 무엇이라고 하는가? - [x] App thinning에 대해서 설명하시오. - [x] 앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가? - [x] @Main에 대해서 설명하시오. - [x] 앱이 foreground에 있을 때와 background에 있을 때 어떤 제약사항이 있나요? - [x] 상태 변화에 따라 다른 동작을 처리하기 위한 앱델리게이트 메서드들을 설명하시오. - [x] 앱이 In-Active 상태가 되는 시나리오를 설명하시오. - [x] scene delegate에 대해 설명하시오. - [x] UIApplication 객체의 컨트롤러 역할은 어디에 구현해야 하는가? - [x] App의 Not running, Inactive, Active, Background, Suspended에 대해 설명하시오. - [x] iOS 앱을 만들고, User Interface를 구성하는 데 필수적인 프레임워크 이름은 무엇인가? - [x] Foundation Kit은 무엇이고 포함되어 있는 클래스들은 어떤 것이 있는지 설명하시오. - [x] Delegate란 무엇인지 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하시오. - [x] NotificationCenter 동작 방식과 활용 방안에 대해 설명하시오. - [x] UIKit 클래스들을 다룰 때 꼭 처리해야하는 애플리케이션 쓰레드 이름은 무엇인가? - [x] App Bundle의 구조와 역할에 대해 설명하시오. - [x] 모든 View Controller 객체의 상위 클래스는 무엇이고 그 역할은 무엇인가? - [x] 자신만의 Custom View를 만들려면 어떻게 해야하는지 설명하시오. - [x] View 객체에 대해 설명하시오. - [x] UIView 에서 Layer 객체는 무엇이고 어떤 역할을 담당하는지 설명하시오. - [x] iOS에서 뷰(View)와 레이어(Layer)의 개념과 차이점에 대해 설명해보세요. - [x] UIWindow 객체의 역할은 무엇인가? - [x] UINavigationController 의 역할이 무엇인지 설명하시오. - [x] TableView를 동작 방식과 화면에 Cell을 출력하기 위해 최소한 구현해야 하는 DataSource 메서드를 설명하시오. - [x] 하나의 View Controller 코드에서 여러 TableView Controller 역할을 해야 할 경우 어떻게 구분해서 구현해야 하는지 설명하시오. - [x] setNeedsLayout와 setNeedsDisplay의 차이에 대해 설명하시오. - [x] stackView의 장점과 단점에 대해서 설명하시오. - [x] NSCache와 딕셔너리로 캐시를 구성했을때의 차이를 설명하시오. - [x] URLSession에 대해서 설명하시오. - [x] prepareForReuse에 대해서 설명하시오. - [x] 다크모드를 지원하는 방법에 대해 설명하시오. - [x] ViewController의 생명주기를 설명하시오. - [x] TableView와 CollectionView의 차이점을 설명하시오. - [x] Dynamic Library와 Static Library의 차이점에 대해 설명해보세요. --- ### Autolayout - [x] 오토레이아웃을 코드로 작성하는 방법은 무엇인가? (3가지) - [x] hugging, resistance에 대해서 설명하시오. - [x] Intrinsic Size에 대해서 설명하시오. - [x] 스토리보드를 이용했을때의 장단점을 설명하시오. - [x] Safearea에 대해서 설명하시오. - [x] Left Constraint 와 Leading Constraint 의 차이점을 설명하시오. - [x] Auto Layout과 Frame-based Layout의 차이점은 무엇인가요? - [x] 성능 향상을 위해 어떤 디버깅 도구를 사용할 수 있나요? 각각의 디버깅 도구는 어떤 상황에서 사용하는 것이 좋나요? --- ### Swift - [x] struct와 class와 enum의 차이를 설명하시오. - [x] class의 성능을 향상 시킬수 있는 방법들을 나열해보시오. - [x] Copy On Write는 어떤 방식으로 동작하는지 설명하시오. - [x] Convenience init에 대해 설명하시오. - [x] AnyObject에 대해 설명하시오. - [x] Optional 이란 무엇인지 설명하시오. - [x] Struct 가 무엇이고 어떻게 사용하는지 설명하시오. - [x] Subscripts에 대해 설명하시오. - [x] String은 왜 subscript로 접근이 안되는지 설명하시오. - [x] instance 메서드와 class 메서드의 차이점을 설명하시오. - [x] class 메서드와 static 메서드의 차이점을 설명하시오. - [x] Delegate 패턴을 활용하는 경우를 예를 들어 설명하시오. - [x] Singleton 패턴을 활용하는 경우를 예를 들어 설명하시오. - [x] KVO 동작 방식에 대해 설명하시오. - [x] Delegates와 Notification 방식의 차이점에 대해 설명하시오. - [x] 멀티 쓰레드로 동작하는 앱을 작성하고 싶을 때 고려할 수 있는 방식들을 설명하시오. - [x] MVC 구조에 대해 블록 그림을 그리고, 각 역할과 흐름을 설명하시오. - [x] 프로토콜이란 무엇인지 설명하시오. - [x] Protocol Oriented Programming과 Object Oriented Programming의 차이점을 설명하시오. - [x] Hashable이 무엇이고, Equatable을 왜 상속해야 하는지 설명하시오. - [x] mutating 키워드에 대해 설명하시오. - [x] 탈출 클로저에 대하여 설명하시오. - [x] Extension에 대해 설명하시오. - [x] Extension 내부에서 함수를 override할 수 있는지 설명하시오. - [x] 접근 제어자의 종류엔 어떤게 있는지 설명하시오. - [x] defer란 무엇인지 설명하시오. - [x] defer가 호출되는 순서는 어떻게 되고, defer가 호출되지 않는 경우를 설명하시오. - [x] property wrapper에 대해서 설명하시오. - [x] Generic에 대해 설명하시오. - [x] some 키워드에 대해 설명하시오. - [x] Result타입에 대해 설명하시오. - [x] Codable에 대하여 설명하시오. - [x] Closure에 대하여 설명하시오. - [x] Closure와 함수와의 관계에 대해 설명하시오. - [x] Optional Chaining과 nil-coalescing operator(??)의 차이점과 사용 시 주의사항은 무엇인가요? - [x] Swift에서 Async/Await 기능이 도입되기 전에, 비동기(Asynchronous) 작업을 처리하는 방법에는 어떤 것들이 있나요? - [x] 타입 변환(Type Casting)과 다형성(Polymorphism)에 대해 설명해보세요. - [x] Swift에서 타입 안전성(type safety)은 어떤 방식으로 보장되나요? --- ### ARC - [x] ARC란 무엇인지 설명하시오. - [x] Retain Count 방식에 대해 설명하시오. - [x] Strong 과 Weak 참조 방식에 대해 설명하시오. - [x] 순환 참조에 대하여 설명하시오. - [x] 강한 순환 참조 (Strong Reference Cycle) 는 어떤 경우에 발생하는지 설명하시오. --- ### Functional Programming - [x] 순수함수란 무엇인지 설명하시오. - [x] 함수형 프로그래밍이 무엇인지 설명하시오. - [x] 고차 함수가 무엇인지 설명하시오. - [x] Swift Standard Library의 map, filter, reduce, compactMap, flatMap에 대하여 설명하시오. - [x] Either type이란? --- ### Architecture - [x] MVVM, MVI, Ribs, VIP 등 자신이 알고있는 아키텍쳐를 설명하시오. - [x] 의존성 주입에 대하여 설명하시오. --- ### Swift UI - [x] @State가 어떻게 동작하는지 설명하시오. --- ### Combine - [x] PassthroughSubject에 대해서 설명하시오 - [x] @Published에 대해서 설명하시오 - [x] AnyCancellable에 대해서 설명하시오 - [ ] sink에 대해서 설명하시오 - [ ] throttle과 debounce의 차이점을 설명하시오. - [x] Data를 Binding 하는 방법에 대해서 설명하시오. --- ### Concurrency --- #### GCD, NSOperation - [x] NSOperationQueue 와 GCD Queue 의 차이점을 설명하시오. - [x] GCD API 동작 방식과 필요성에 대해 설명하시오. - [x] Global DispatchQueue 의 Qos 에는 어떤 종류가 있는지, 각각 어떤 의미인지 설명하시오. #### Swift Concurrency - [ ] @MainActor는 언제 이용하는가? - [ ] task동작 방식과 gcd, nsoperation과의 차이점을 설명하시오. --- # Optional - 아래서부터는 추가 공부하면 좋은 내용들 - Objc나 rx는 회사, 팀마다 사용하는 곳이 차이가 있고 신입이나 주니어 기준으로 필수라고 여겨지지 않기에 옵셔널에 추가함. --- ### Rx - [ ] Reactive Programming이 무엇인지 설명하시오. - [ ] RxSwift를 왜 사용하는지 설명하시오. - [ ] RxSwift의 단점을 설명하시오. - [ ] RxSwift에서 Hot Observable과 Cold Observable의 차이를 설명하시오. - [ ] Subject의 종류와 차이점에 대해 설명하시오. - [ ] Subject와 Driver의 차이를 설명하시오. - [ ] Single, Completable, Maybe의 차이점에 대해 설명하고, 언제 적용하면 좋을지 설명하시오. --- ### MRC - [ ] ARC 대신 Manual Reference Count 방식으로 구현할 때 꼭 사용해야 하는 메서드들을 쓰고 역할을 설명하시오. - [ ] retain 과 assign 의 차이점을 설명하시오. - [ ] 특정 객체를 autorelease 하기 위해 필요한 사항과 과정을 설명하시오. - [ ] Autorelease Pool을 사용해야 하는 상황을 두 가지 이상 예로 들어 설명하시오. - [ ] 다음 코드를 실행하면 어떤 일이 발생할까 추측해서 설명하시오. Ball *ball = [[[[Ball alloc] init] autorelease] autorelease]; --- ### Advanced - [ ] method swizzling이 무엇이고, 어떨 때 사용하는지 설명하시오. - [ ] NSCoder 클래스는 어떤 상황에서 어떻게 써야 하는지 설명하시오. - [ ] Responder Chain 구조에 대해 설명하고, First Responder 역할에 대해 설명하시오. - [ ] NSObject부터 UIButton 까지 상속 과정의 계층과 역할을 설명하시오. - [ ] shallow copy와 deep copy의 차이점을 설명하시오. - [x] Push Notification 방식에 대해 설명하시오. - [x] Foundation 과 Core Foundation 프레임워크의 차이점을 설명하시오. - [ ] NSURLConnection 에서 사용하는 Delegate 메서드들에 대해 설명하시오. - [ ] Synchronous 방식과 Asynchronous 방식으로 URL Connection을 처리할 경우의 장단점을 비교하시오. - [ ] Plist 파일 구조와 Plist 파일에 저장된 데이터를 다루기 적합한 클래스를 설명하시오. - [x] Core Data와 Sqlite 같은 데이터 베이스의 차이점을 설명하시오. - [ ] JSON 데이터를 처리하는 방식과 파서, 객체 변환 방식에 대해 설명하시오. - [ ] 웹 서버와 HTTP 연결을 사용해서 데이터를 주거나 받으려면 사용해야 하는 클래스와 동작을 설명하시오. - [x] Protocol에서는 왜 var만 되는지 설명하시요. - [x] DispatchQueue.main.sync를 사용하는 상황을 설명하시오. - [x] Run Loops에 대해 설명하시오. --- ### Objective-C - [ ] Swift의 클로저와 Objective-C의 블록은 어떤 차이가 있는가? - [ ] Mutable 객체과 Immutable 객체는 어떤것이 있는지 예를 들고, 차이점을 설명하시오. - [ ] dynamic과 property 의미와 차이를 설명하시오. - [ ] @property로 선언한 NSString* title 의 getter/setter 메서드를 구현해보시오. - [ ] @property에서 atomic과 nonatomic 차이점을 설명하고, 어떤것이 안전한지, 어느것이 기본인지 설명하시오. - [ ] @property로 선언한다는 것의 의미를 설명하고, .h에 넣을 경우와 .m에 넣을 경우 차이점을 설명하시오. - [ ] -performSelector:withObject:afterDelay: 메시지를 보내면 인자값의 객체는 retain되는가? 그 이유를 함께 설명하시오. - [ ] Objective-C 에서 캡슐화된 데이터를 접근하기 위한 방법들을 설명하시오. - [ ] Fast Enumeration 이란 무엇인지 설명하시오. - [ ] unnamed category 방식에 대해 설명하시오. - [ ] Category 확장과 Subclass 확장의 차이점을 설명하시오. - [ ] Category 방식에 대해 설명하시오. - [ ] Objective-C 에서 Protocol 이란 무엇인지 설명하시오. - [ ] Objective-C++ 방식이 무엇인지 설명하고, 어떤 경우 사용해야 하는지 설명하시오. --- ## 솜 --- ### iOS - [x] Bounds 와 Frame 의 차이점을 설명하시오. - [x] 실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것을 설명하시오. - [x] 앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체를 무엇이라고 하는가? - [x] 앱 화면의 콘텐츠를 표시하는 로직과 관리를 담당하는 객체를 무엇이라고 하는가? - [x] App thinning에 대해서 설명하시오. - [x] 앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가? - [x] @Main에 대해서 설명하시오. - [x] 앱이 foreground에 있을 때와 background에 있을 때 어떤 제약사항이 있나요? - [x] 상태 변화에 따라 다른 동작을 처리하기 위한 앱델리게이트 메서드들을 설명하시오. - [x] 앱이 In-Active 상태가 되는 시나리오를 설명하시오. - [x] scene delegate에 대해 설명하시오. - [x] UIApplication 객체의 컨트롤러 역할은 어디에 구현해야 하는가? - [x] App의 Not running, Inactive, Active, Background, Suspended에 대해 설명하시오. - [x] iOS 앱을 만들고, User Interface를 구성하는 데 필수적인 프레임워크 이름은 무엇인가? - [x] Foundation Kit은 무엇이고 포함되어 있는 클래스들은 어떤 것이 있는지 설명하시오. - [x] Delegate란 무엇인지 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하시오. - [x] NotificationCenter 동작 방식과 활용 방안에 대해 설명하시오. - [x] UIKit 클래스들을 다룰 때 꼭 처리해야하는 애플리케이션 쓰레드 이름은 무엇인가? - [x] App Bundle의 구조와 역할에 대해 설명하시오. - [x] 모든 View Controller 객체의 상위 클래스는 무엇이고 그 역할은 무엇인가? - [x] 자신만의 Custom View를 만들려면 어떻게 해야하는지 설명하시오. - [x] View 객체에 대해 설명하시오. - [x] UIView 에서 Layer 객체는 무엇이고 어떤 역할을 담당하는지 설명하시오. - [x] iOS에서 뷰(View)와 레이어(Layer)의 개념과 차이점에 대해 설명해보세요. - [x] UIWindow 객체의 역할은 무엇인가? - [x] UINavigationController 의 역할이 무엇인지 설명하시오. - [x] TableView를 동작 방식과 화면에 Cell을 출력하기 위해 최소한 구현해야 하는 DataSource 메서드를 설명하시오. - [x] 하나의 View Controller 코드에서 여러 TableView Controller 역할을 해야 할 경우 어떻게 구분해서 구현해야 하는지 설명하시오. - [x] setNeedsLayout와 setNeedsDisplay의 차이에 대해 설명하시오. - [x] stackView의 장점과 단점에 대해서 설명하시오. - [x] NSCache와 딕셔너리로 캐시를 구성했을때의 차이를 설명하시오. - [x] URLSession에 대해서 설명하시오. - [x] prepareForReuse에 대해서 설명하시오. - [x] 다크모드를 지원하는 방법에 대해 설명하시오. - [x] ViewController의 생명주기를 설명하시오. - [x] TableView와 CollectionView의 차이점을 설명하시오. - [x] Dynamic Library와 Static Library의 차이점에 대해 설명해보세요. --- ### Autolayout - [x] 오토레이아웃을 코드로 작성하는 방법은 무엇인가? (3가지) - [x] hugging, resistance에 대해서 설명하시오. - [x] Intrinsic Size에 대해서 설명하시오. - [x] 스토리보드를 이용했을때의 장단점을 설명하시오. - [x] Safearea에 대해서 설명하시오. - [x] Left Constraint 와 Leading Constraint 의 차이점을 설명하시오. - [x] Auto Layout과 Frame-based Layout의 차이점은 무엇인가요? - [x] 성능 향상을 위해 어떤 디버깅 도구를 사용할 수 있나요? 각각의 디버깅 도구는 어떤 상황에서 사용하는 것이 좋나요? --- ### Swift - [x] struct와 class와 enum의 차이를 설명하시오. - [x] class의 성능을 향상 시킬수 있는 방법들을 나열해보시오. - [x] Copy On Write는 어떤 방식으로 동작하는지 설명하시오. - [x] Convenience init에 대해 설명하시오. - [x] AnyObject에 대해 설명하시오. - [x] Optional 이란 무엇인지 설명하시오. - [x] Struct 가 무엇이고 어떻게 사용하는지 설명하시오. - [x] Subscripts에 대해 설명하시오. - [x] String은 왜 subscript로 접근이 안되는지 설명하시오. - [x] instance 메서드와 class 메서드의 차이점을 설명하시오. - [x] class 메서드와 static 메서드의 차이점을 설명하시오. - [x] Delegate 패턴을 활용하는 경우를 예를 들어 설명하시오. - [x] Singleton 패턴을 활용하는 경우를 예를 들어 설명하시오. - [x] KVO 동작 방식에 대해 설명하시오. - [x] Delegates와 Notification 방식의 차이점에 대해 설명하시오. - [x] 멀티 쓰레드로 동작하는 앱을 작성하고 싶을 때 고려할 수 있는 방식들을 설명하시오. - [x] MVC 구조에 대해 블록 그림을 그리고, 각 역할과 흐름을 설명하시오. - [x] 프로토콜이란 무엇인지 설명하시오. - [x] Protocol Oriented Programming과 Object Oriented Programming의 차이점을 설명하시오. - [x] Hashable이 무엇이고, Equatable을 왜 상속해야 하는지 설명하시오. - [x] mutating 키워드에 대해 설명하시오. - [x] 탈출 클로저에 대하여 설명하시오. - [x] Extension에 대해 설명하시오. - [x] Extension 내부에서 함수를 override할 수 있는지 설명하시오. - [x] 접근 제어자의 종류엔 어떤게 있는지 설명하시오. - [x] defer란 무엇인지 설명하시오. - [x] defer가 호출되는 순서는 어떻게 되고, defer가 호출되지 않는 경우를 설명하시오. - [x] property wrapper에 대해서 설명하시오. - [x] Generic에 대해 설명하시오. - [x] some 키워드에 대해 설명하시오. - [x] Result타입에 대해 설명하시오. - [x] Codable에 대하여 설명하시오. - [x] Closure에 대하여 설명하시오. - [x] Closure와 함수와의 관계에 대해 설명하시오. - [x] Optional Chaining과 nil-coalescing operator(??)의 차이점과 사용 시 주의사항은 무엇인가요? - [x] Swift에서 Async/Await 기능이 도입되기 전에, 비동기(Asynchronous) 작업을 처리하는 방법에는 어떤 것들이 있나요? - [x] 타입 변환(Type Casting)과 다형성(Polymorphism)에 대해 설명해보세요. - [x] Swift에서 타입 안전성(type safety)은 어떤 방식으로 보장되나요? --- ### ARC - [x] ARC란 무엇인지 설명하시오. - [x] Retain Count 방식에 대해 설명하시오. - [x] Strong 과 Weak 참조 방식에 대해 설명하시오. - [x] 순환 참조에 대하여 설명하시오. - [x] 강한 순환 참조 (Strong Reference Cycle) 는 어떤 경우에 발생하는지 설명하시오. --- ### Functional Programming - [x] 순수함수란 무엇인지 설명하시오. - [x] 함수형 프로그래밍이 무엇인지 설명하시오. - [x] 고차 함수가 무엇인지 설명하시오. - [ ] Swift Standard Library의 map, filter, reduce, compactMap, flatMap에 대하여 설명하시오. - [x] Either type이란? --- ### Architecture - [x] MVVM, MVI, Ribs, VIP 등 자신이 알고있는 아키텍쳐를 설명하시오. - [x] 의존성 주입에 대하여 설명하시오. --- ### Swift UI - [x] @State가 어떻게 동작하는지 설명하시오. --- ### Combine - [ ] PassthroughSubject에 대해서 설명하시오 - [x] @Published에 대해서 설명하시오 - [ ] AnyCancellable에 대해서 설명하시오 - [ ] sink에 대해서 설명하시오 - [ ] throttle과 debounce의 차이점을 설명하시오. - [ ] Data를 Binding 하는 방법에 대해서 설명하시오. --- ### Concurrency --- #### GCD, NSOperation - [x] NSOperationQueue 와 GCD Queue 의 차이점을 설명하시오. - 월 - [ ] GCD API 동작 방식과 필요성에 대해 설명하시오. - [x] Global DispatchQueue 의 Qos 에는 어떤 종류가 있는지, 각각 어떤 의미인지 설명하시오. #### Swift Concurrency - [ ] @MainActor는 언제 이용하는가? - [ ] task동작 방식과 gcd, nsoperation과의 차이점을 설명하시오. --- # Optional - 아래서부터는 추가 공부하면 좋은 내용들 - Objc나 rx는 회사, 팀마다 사용하는 곳이 차이가 있고 신입이나 주니어 기준으로 필수라고 여겨지지 않기에 옵셔널에 추가함. --- ### Rx - [ ] Reactive Programming이 무엇인지 설명하시오. - [ ] RxSwift를 왜 사용하는지 설명하시오. - [ ] RxSwift의 단점을 설명하시오. - [ ] RxSwift에서 Hot Observable과 Cold Observable의 차이를 설명하시오. - [ ] Subject의 종류와 차이점에 대해 설명하시오. - [ ] Subject와 Driver의 차이를 설명하시오. - [ ] Single, Completable, Maybe의 차이점에 대해 설명하고, 언제 적용하면 좋을지 설명하시오. --- ### MRC - [ ] ARC 대신 Manual Reference Count 방식으로 구현할 때 꼭 사용해야 하는 메서드들을 쓰고 역할을 설명하시오. - [ ] retain 과 assign 의 차이점을 설명하시오. - [ ] 특정 객체를 autorelease 하기 위해 필요한 사항과 과정을 설명하시오. - [ ] Autorelease Pool을 사용해야 하는 상황을 두 가지 이상 예로 들어 설명하시오. - [ ] 다음 코드를 실행하면 어떤 일이 발생할까 추측해서 설명하시오. Ball *ball = [[[[Ball alloc] init] autorelease] autorelease]; --- ### Advanced - [ ] method swizzling이 무엇이고, 어떨 때 사용하는지 설명하시오. - [ ] NSCoder 클래스는 어떤 상황에서 어떻게 써야 하는지 설명하시오. - [ ] Responder Chain 구조에 대해 설명하고, First Responder 역할에 대해 설명하시오. - [ ] NSObject부터 UIButton 까지 상속 과정의 계층과 역할을 설명하시오. - [ ] shallow copy와 deep copy의 차이점을 설명하시오. - [x] Push Notification 방식에 대해 설명하시오. - [x] Foundation 과 Core Foundation 프레임워크의 차이점을 설명하시오. - [ ] NSURLConnection 에서 사용하는 Delegate 메서드들에 대해 설명하시오. - [ ] Synchronous 방식과 Asynchronous 방식으로 URL Connection을 처리할 경우의 장단점을 비교하시오. - [ ] Plist 파일 구조와 Plist 파일에 저장된 데이터를 다루기 적합한 클래스를 설명하시오. - [x] Core Data와 Sqlite 같은 데이터 베이스의 차이점을 설명하시오. - [ ] JSON 데이터를 처리하는 방식과 파서, 객체 변환 방식에 대해 설명하시오. - [ ] 웹 서버와 HTTP 연결을 사용해서 데이터를 주거나 받으려면 사용해야 하는 클래스와 동작을 설명하시오. - [x] Protocol에서는 왜 var만 되는지 설명하시오. - [x] DispatchQueue.main.sync를 사용하는 상황을 설명하시오. - [x] Run Loops에 대해 설명하시오. --- ### Objective-C - [ ] Swift의 클로저와 Objective-C의 블록은 어떤 차이가 있는가? - [ ] Mutable 객체과 Immutable 객체는 어떤것이 있는지 예를 들고, 차이점을 설명하시오. - [ ] dynamic과 property 의미와 차이를 설명하시오. - [ ] @property로 선언한 NSString* title 의 getter/setter 메서드를 구현해보시오. - [ ] @property에서 atomic과 nonatomic 차이점을 설명하고, 어떤것이 안전한지, 어느것이 기본인지 설명하시오. - [ ] @property로 선언한다는 것의 의미를 설명하고, .h에 넣을 경우와 .m에 넣을 경우 차이점을 설명하시오. - [ ] -performSelector:withObject:afterDelay: 메시지를 보내면 인자값의 객체는 retain되는가? 그 이유를 함께 설명하시오. - [ ] Objective-C 에서 캡슐화된 데이터를 접근하기 위한 방법들을 설명하시오. - [ ] Fast Enumeration 이란 무엇인지 설명하시오. - [ ] unnamed category 방식에 대해 설명하시오. - [ ] Category 확장과 Subclass 확장의 차이점을 설명하시오. - [ ] Category 방식에 대해 설명하시오. - [ ] Objective-C 에서 Protocol 이란 무엇인지 설명하시오. - [ ] Objective-C++ 방식이 무엇인지 설명하고, 어떤 경우 사용해야 하는지 설명하시오. --- # Essential Skills for iOS Developers ## Core Programming Languages ### **Swift**: Advanced features and best practices. - [x] 1. **Swift의 옵셔널 체이닝(Optional Chaining)은 어떤 상황에서 사용하는 것이 가장 효과적인가요?** - [x] 옵셔널 체이닝과 강제 언래핑(Forced Unwrapping)의 차이점을 어떻게 설명하시겠습니까? - [x] 2. **Swift에서의 메모리 관리 방법(ARC)에 대해 설명하고, 순환 참조(Circular Reference)를 방지하기 위한 전략은 무엇인가요?** - [x] 순환 참조를 해결하기 위한 `weak`와 `unowned` 참조의 차이점은 무엇인가요? - [x] ARC를 효과적으로 관리하기 위한 코드 작성 방법은 어떤 것이 있나요? - [x] 3. **Swift의 프로토콜 지향 프로그래밍(Protocol-Oriented Programming)의 장점은 무엇이며, 이를 클래스 기반 프로그래밍과 비교했을 때 어떤 차이점이 있나요?** - [x] 프로토콜을 활용한 설계에서 주의해야 할 점은 무엇인가요? - [x] 프로토콜 확장(Protocol Extension)을 사용하여 코드 재사용성을 높이는 방법은 무엇인가요? - [x] 4. **Swift의 제네릭(Generic)을 사용하는 이점과 구현 시 고려해야 할 사항은 무엇인가요?** - [x] 제네릭 타입의 제약 조건(Type Constraints)을 설정하는 방법과 그 중요성은 무엇인가요? - [x] 제네릭과 관련된 성능 문제는 어떻게 해결할 수 있나요? - [x] 5. **Swift의 함수형 프로그래밍 요소(예: map, filter, reduce)를 사용하는 경우, 어떤 장점이 있으며, 언제 사용하는 것이 적절한가요?** - [x] 함수형 프로그래밍 패러다임을 채택함으로써 발생할 수 있는 단점은 무엇인가요? - [x] 함수형 프로그래밍과 객체지향 프로그래밍을 어떻게 효과적으로 조합할 수 있나요? - [x] 6. **Swift에서의 오류 처리(Error Handling) 방법과 모범 사례에 대해 설명해 주세요.** - [x] 사용자 정의 오류 타입을 만들 때 고려해야 할 사항은 무엇인가요? - [x] 오류 전파(Error Propagation)와 오류 처리 패턴의 선택 기준은 무엇인가요? - [x] 7. **Swift의 클로저(Closure) 사용 시 성능적인 측면을 고려해야 하는 경우는 어떤 것들이 있나요?** - [x] 클로저에서 메모리 누수(Memory Leak)를 방지하기 위한 전략은 무엇인가요? - [x] 클로저를 사용하여 비동기 작업을 관리하는 방법은 무엇인가요? - [x] 8. **Swift의 패턴 매칭(Pattern Matching) 기능을 효과적으로 사용하는 방법은 무엇인가요?** - [x] `switch` 문과 패턴 매칭을 사용할 때의 모범 사례는 무엇인가요? - [x] 패턴 매칭을 사용하여 복잡한 데이터 구조를 처리하는 예시는 무엇인가요? - [x] 9. **Swift의 효율적인 컬렉션 사용 방법에 대해 설명해 주세요. 배열(Array), 딕셔너리(Dictionary), 세트(Set) 사용 시 성능에 영향을 미치는 요소는 무엇인가요?** - [x] 큰 데이터 세트를 처리할 때 컬렉션의 성능을 최적화하는 방법은 무엇인가요? - [x] 컬렉션 타입의 선택 기준은 어떻게 결정하나요? - [x] 10. **Swift의 모듈화 및 패키지 관리를 위한 전략은 무엇이며, 이를 통해 얻을 수 있는 이점은 무엇인가요** - [x] Swift Package Manager의 사용 방법과 이점은 무엇인가요? - [x] 모듈화된 코드베이스를 유지 관리하는 데 있어서 고려해야 할 주요 요소는 무엇인가요? - [x] 11. **Swift의 접근 제어(Access Control)를 활용한 안전한 코드 작성 방법은 무엇인가요?** - [x] 접근 제어를 통해 코드의 캡슐화를 강화하는 방법은 무엇인가요? - [x] `public`, `private`, `internal`, `fileprivate`, `open` 접근 수준의 차이점과 사용 상황은 무엇인가요? - [x] 12. **Swift의 확장(Extension) 사용 시 모범 사례는 무엇이며, 확장을 사용할 때의 주의점은 무엇인가요?** - [x] 확장을 통해 기존 타입에 기능을 추가할 때의 이점과 한계는 무엇인가요? - [x] 기존 클래스나 구조체에 확장을 추가할 때, 충돌 방지를 위한 전략은 무엇인가요? - [x] 13. **Swift에서의 런타임 최적화 방법은 무엇이며, 성능 분석을 위한 도구 사용 방법은 어떻게 되나요?** - [x] 코드 최적화를 위한 프로파일링 도구의 사용 예시는 어떤 것들이 있나요? - [x] 런타임 성능에 영향을 미치는 주요 요소들은 무엇인가요? - [x] 14. **Swift의 리터럴과 연산자 오버로딩을 통해 얻을 수 있는 이점과 주의사항은 무엇인가요?** - [x] 사용자 정의 타입에 대한 리터럴 표현을 구현하는 방법은 무엇인가요? - [x] 연산자 오버로딩을 사용할 때 코드의 가독성과 유지보수성에 미치는 영향은 무엇인가요? - [x] 15. **Swift에서의 Type Inference(타입 추론)의 작동 원리와 효율적 사용을 위한 전략은 무엇인가요?** - [x] 타입 추론이 컴파일 시간에 미치는 영향은 무엇인가요? - [x] 명시적 타입 선언과 타입 추론 중 어느 경우가 더 바람직한가요? - [x] 16. **Swift의 Associated Types(연관 타입)에 대해 설명하고, 프로토콜에서 이를 사용하는 방법과 장점은 무엇인가요?** - [x] 연관 타입을 사용하는 예시와 그 이점은 무엇인가요? - [x] 연관 타입을 사용할 때 제네릭과의 관계는 어떻게 되나요? - [x] 17. **Swift의 키-값 관찰(Key-Value Observing, KVO)과 프로퍼티 옵저버(Property Observer)의 차이점과 각각의 사용 시나리오는 무엇인가요?** - [x] KVO를 사용할 때의 주의사항은 무엇인가요? - [x] 프로퍼티 옵저버를 통해 얻을 수 있는 이점과 한계는 무엇인가요? - [x] 18. **Swift의 델리게이트 패턴(Delegate Pattern)을 사용하여 컴포넌트 간 통신을 구현하는 방법은 무엇인가요?** - [x] 델리게이트 패턴의 장단점은 무엇인가요? - [x] 델리게이트 패턴과 노티피케이션 센터(Notification Center)를 비교했을 때의 차이점은 무엇인가요? - [x] 19. **Swift의 리플렉션(Reflection)과 메타 타입(MetaType)을 사용하는 경우와 주의사항은 무엇인가요?** - [x] 리플렉션을 사용하는 예제는 무엇인가요? - [x] 리플렉션을 사용할 때의 성능적 영향은 어떤 것이 있나요? - [x] 20. **Swift의 커스텀 서브스크립트(Custom Subscript) 구현 방법과 사용 시의 이점은 무엇인가요?** - [x] 서브스크립트를 사용하여 컬렉션 또는 클래스의 데이터 접근을 단순화하는 방법은 무엇인가요? - [x] 서브스크립트 오버로딩을 사용하는 경우의 예시는 무엇인가요? - [x] 21. **Swift에서의 비동기 이미지 로딩과 캐싱을 위한 전략은 무엇인가요?** - [x] 이미지 로딩 시 성능과 메모리 관리를 최적화하는 방법은 무엇인가요? - [x] 네트워크로부터 이미지를 비동기적으로 로딩하고 캐싱하는 프로세스를 설계하는 방법은 무엇인가요? - [x] 22. **Swift의 커스텀 연산자(Custom Operator)를 정의하고 사용하는 방법은 무엇인가요?** - [x] 커스텀 연산자를 사용할 때의 이점과 잠재적 위험은 무엇인가요? - [x] 커스텀 연산자의 가독성과 유지보수에 미치는 영향은 어떻게 되나요? ### **Objective-C**: Basic understanding, primarily for legacy code. - [ ] 1. Objective-C를 사용하여 이전에 작성된 iOS 애플리케이션을 유지보수할 때 어떤 주요 과제에 직면했었나요? - [ ] 특정 과제를 해결하기 위해 사용한 전략이나 접근 방법은 무엇이었나요? - [ ] 2. Objective-C와 Swift의 주요 차이점은 무엇이라고 생각하시나요, 그리고 이 차이가 프로젝트에 어떤 영향을 미칠 수 있다고 보시나요? - [ ] 이러한 차이점이 코드의 유지보수성에 어떤 영향을 끼친다고 생각하시나요? - [ ] 3. Objective-C 코드와 Swift 코드를 통합하는 과정에서 겪었던 주요 도전 과제는 무엇이었나요? - [ ] 이 도전을 극복하기 위해 어떤 기술이나 방법을 사용하셨나요? - [ ] 4. Objective-C에서 메시지 전송(message sending)이 어떻게 동작하는지 설명해 주시겠어요? 이 개념이 Objective-C의 객체지향 프로그래밍에 어떤 영향을 미치는지 말씀해 주시겠어요? - [ ] 5. Objective-C의 카테고리(categories)와 익스텐션(extensions)의 차이점은 무엇인가요, 그리고 각각을 어떤 상황에서 사용하시나요? - [ ] 카테고리나 익스텐션을 사용하여 문제를 해결한 경험이 있다면 구체적인 예를 들어 설명해 주시겠어요? - [ ] 6. Objective-C의 런타임(runtime) 시스템은 어떤 역할을 하며, 이것이 어떻게 Objective-C의 강력한 기능 중 하나로 여겨지나요? - [ ] 런타임을 활용한 개발 경험이 있다면, 그 예시를 들어 설명해 주시겠어요? - [ ] 7. Objective-C의 메모리 관리 방법 중 자동 참조 카운팅(ARC)과 매뉴얼 리테인 카운트(MRC)의 차이점과 각각의 장단점은 무엇인가요? - [ ] ARC를 도입하기 전과 후의 경험에서 느낀 차이점을 말씀해 주시겠어요? ## Development Environment and Tools ### **Xcode IDE**: Interface Builder, debugging, profiling. - [x] 1. Xcode의 인터페이스 빌더를 사용할 때의 장점과 단점은 무엇인가요? - [x] 인터페이스 빌더를 사용하는 경우와 코드로 UI를 작성하는 경우, 어떤 상황에서 각각 더 유리할까요? - [x] 2. Xcode에서 디버깅을 위해 사용할 수 있는 주요 도구와 기능은 무엇인가요? - [x] 3. Xcode의 디버깅 중에 LLDB 명령어를 사용하는 이점은 무엇인가요? - [x] 자주 사용되는 LLDB 명령어와 그 사용 예시는 무엇인가요? - [x] 4. Xcode의 인터페이스 빌더를 사용하여 다양한 디바이스 및 화면 크기에 대응하는 UI를 어떻게 구축할 수 있나요? - [x] 이를 위해 주로 사용되는 기능이나 기술은 무엇인가요? - [ ] 5. Xcode의 디버거를 사용하여 멀티스레딩 및 동시성 문제를 해결하는 방법은 무엇인가요? - [ ] 멀티스레딩 문제를 진단할 때 유용한 Xcode의 특정 기능은 무엇인가요? - [ ] 6. 인터페이스 빌더에서 Auto Layout을 사용하여 적응형 UI를 설계하는 방법은 무엇인가요? - [ ] Auto Layout을 효율적으로 사용하기 위한 팁이나 전략은 무엇인가요? - [ ] 7. Xcode에서 단위 테스트(Unit Testing)와 UI 테스트를 위해 어떤 도구나 기법을 사용할 수 있나요? - [ ] 8. Xcode의 Asset Catalog를 사용하여 앱의 리소스를 관리하는 방법은 무엇인가요? - [ ] Asset Catalog를 사용함으로써 얻을 수 있는 이점은 무엇인가요? - [ ] 9. Xcode의 버전 관리 시스템과 통합하는 방법은 무엇인가요? - [ ] Xcode 내에서 효율적인 버전 관리를 위한 전략은 무엇인가요? ### **Version Control**: Git. - [ ] 1. Git에서 브랜치(branch)를 사용하는 주된 목적은 무엇인가요? - [ ] 프로젝트에서 브랜치를 효과적으로 관리하는 전략은 무엇인가요? - [ ] 2. Git에서 병합(merge)과 리베이스(rebase)의 차이점은 무엇이며, 각각 어떤 상황에서 사용하는 것이 더 적합한가요? - [ ] 병합과 리베이스를 사용할 때 주의해야 할 점은 무엇인가요? - [ ] 3. Git에서 충돌(conflict)이 발생했을 때 해결하는 효과적인 방법은 무엇인가요? - [ ] 충돌을 예방하기 위한 좋은 작업 방식은 무엇인가요? - [ ] 4. Git의 'stash' 기능은 어떤 상황에서 유용하며, 어떻게 사용하는 것이 좋은가요? - [ ] Stash 사용 시 주의할 점은 무엇인가요? - [ ] 5. Git에서 'cherry-pick'을 사용하는 경우와 그 목적은 무엇인가요? - [ ] Cherry-pick을 사용할 때 발생할 수 있는 문제와 그 해결 방법은 무엇인가요? - [ ] 6. Git의 태그(tagging) 기능을 사용하는 이유는 무엇이며, 어떤 상황에서 태그를 사용하나요? - [ ] 태그를 사용하여 버전 관리를 할 때의 이점은 무엇인가요? - [ ] 7. Git에서 원격 저장소(remote repository)와 로컬 저장소(local repository)를 동기화하는 주요 방법은 무엇인가요? - [ ] 원격 저장소와 동기화할 때 발생할 수 있는 문제와 그 해결 방법은 무엇인가요? - [ ] 8. Git의 'revert'와 'reset' 명령의 차이는 무엇이며, 각각 어떤 상황에서 사용되나요? - [ ] Revert와 Reset을 사용할 때 주의해야 할 점은 무엇인가요? ### **Dependency Management**: Swift Package Manager (SPM), CocoaPods. - [ ] 1. Swift Package Manager와 CocoaPods의 주요 차이점은 무엇이라고 생각하시나요? - [ ] 이 차이점이 프로젝트 선택 시 어떤 영향을 미칠 수 있나요? - [ ] 특정 상황에서 한 도구를 다른 도구보다 선호하는 이유는 무엇인가요? - [ ] 2. CocoaPods을 사용할 때 겪었던 가장 큰 문제는 무엇이었나요? 그 문제를 어떻게 해결하셨나요? - [ ] 이 경험을 통해 CocoaPods의 어떤 측면을 더 잘 이해하게 되었나요? - [ ] 3. Swift Package Manager를 사용하면서 성능이나 호환성과 관련하여 어려움을 겪은 적이 있나요? 이러한 문제를 어떻게 극복하셨나요? - [ ] 이 과정에서 SPM의 어떤 장점이나 한계를 발견하셨나요? - [ ] 4. 대규모 프로젝트에서 CocoaPods 대신 Swift Package Manager를 사용하는 것의 장단점은 무엇이라고 생각하시나요? - [ ] 대규모 프로젝트에서 두 도구를 효과적으로 관리하는 방법에는 어떤 것들이 있을까요? - [ ] 5. 의존성 관리 도구를 선택할 때 가장 중요하게 고려하는 요소는 무엇인가요? 그리고 그 이유는 무엇인가요? - [ ] 프로젝트의 특정 요구 사항에 따라 이 기준이 어떻게 변할 수 있나요? - [ ] 6. CocoaPods이나 Swift Package Manager를 사용하여 의존성을 관리하는 과정에서 버전 관리 문제를 해결한 경험이 있나요? 그 상황을 설명해 주실 수 있나요? - [ ] 이 경험을 통해 어떤 중요한 교훈을 얻으셨나요? - [ ] 7. Swift Package Manager의 빌드 시스템과 CocoaPods의 빌드 시스템을 비교해본다면, 어떤 점에서 차이가 있다고 생각하시나요? - [ ] 이러한 차이가 실제 프로젝트에 어떤 영향을 미칠 수 있나요? - [ ] 8. 개인적으로 가장 선호하는 의존성 관리 도구는 무엇인가요, 그리고 그 이유는 무엇인가요? ## Programming Paradigms ### **Object-Oriented Programming (OOP)**: Encapsulation, inheritance, polymorphism. - [ ] 1. 캡슐화를 구현할 때 가장 중요하게 고려해야 할 원칙은 무엇이라고 생각하시나요? - [ ] 이 원칙을 구현함으로써 어떤 장점을 기대할 수 있을까요? - [ ] 이러한 장점이 실제 프로젝트에서 어떻게 유용하게 작용했는지 구체적인 예를 들 수 있나요? - [ ] 2. 상속을 사용하는 주된 이유와 그것이 코드 재사용성에 어떻게 기여하는지 설명해 주실 수 있나요? - [ ] 상속을 사용할 때 발생할 수 있는 문제점은 무엇이며, 이를 어떻게 해결할 수 있을까요? - [ ] 이러한 문제를 해결하기 위한 대안적인 방법이 있다면 무엇인가요? - [ ] 3. 다형성이 프로그래밍에 있어서 중요한 이유는 무엇이라고 생각하시나요? - [ ] 다형성을 활용하여 구현한 실제 사례를 설명해 주실 수 있나요? - [ ] 이 사례에서 다형성이 어떤 문제를 해결하는 데 도움이 되었나요? - [ ] 4. 객체지향 프로그래밍에서 캡슐화, 상속, 다형성이 서로 어떻게 상호작용하며 프로그램의 효율성을 높이는지 설명해 주실 수 있나요? - [ ] 이 세 가지 원칙이 상충되는 경우는 어떻게 해결하시나요? - [ ] 상충되는 경우에 대한 구체적인 예를 들어 설명해 주실 수 있나요? - [ ] 5. 상속과 다형성을 사용할 때 코드의 유지보수에 어떤 영향을 미치나요? - [ ]유지보수가 어려워질 수 있는 상황을 예방하기 위해 어떤 접근 방식을 사용하시나요? - [ ] 이 접근 방식이 실제로 어떤 문제를 해결하거나 예방했는지 구체적인 사례를 들어 설명해 주실 수 있나요? - [ ] 6. 객체지향 설계 원칙(SOLID 등) 중 캡슐화, 상속, 다형성과 관련하여 특히 중요하다고 생각하는 원칙은 무엇이며, 그 이유는 무엇인가요? - [ ] 이 원칙을 따르지 않았을 때 발생할 수 있는 문제는 무엇인가요? - [ ] 실제 프로젝트에서 이 원칙을 적용하여 문제를 해결한 경험이 있나요? ### **Functional Programming (FP)**: First-class functions, immutability, pure functions. - [ ] 1. 일급 함수의 개념을 프로그래밍에 적용할 때 얻을 수 있는 주요 이점은 무엇이라고 생각하시나요? - [ ] 이러한 이점이 실제 프로젝트에서 어떻게 활용되었나요? - [ ] 프로젝트에서 일급 함수를 활용한 구체적인 예를 들 수 있나요? - [ ] 2. 불변성을 유지하는 것이 프로그램의 신뢰성과 유지보수성에 어떻게 기여한다고 생각하시나요? - [ ] 불변성을 유지하기 위해 어떤 프로그래밍 기법을 사용하시나요? - [ ] 이 기법이 실제 코드의 안정성이나 성능에 어떤 영향을 미쳤나요? - [ ] 3. 순수 함수의 개념이 프로그래밍에서 중요한 이유는 무엇이라고 생각하시나요? - [ ] 순수 함수를 사용하여 구현한 프로젝트에서 부작용(side effects)을 어떻게 제어했나요? - [ ] 순수 함수를 사용함으로써 어떤 장점을 경험했나요? - [ ] 4. 함수형 프로그래밍의 핵심 개념인 일급 함수, 불변성, 순수 함수가 서로 어떻게 상호작용하여 프로그램의 품질을 향상시키나요? - [ ] 이러한 개념들이 상호작용하는 과정에서 발생할 수 있는 어려움은 무엇이며, 이를 어떻게 극복하시나요? - [ ] 어려움을 극복하는 과정에서 얻은 교훈이 있나요? - [ ] 5. 함수형 프로그래밍이 전통적인 명령형 프로그래밍 방식과 비교했을 때, 어떤 상황에서 더 효과적이라고 생각하시나요? - [ ] 함수형 프로그래밍을 적용하여 복잡한 문제를 해결한 경험이 있나요? - [ ] 그 경험에서 어떤 특정한 함수형 프로그래밍 개념이 특히 유용했나요? - [ ] 6. 함수형 프로그래밍에서 발생할 수 있는 성능 문제를 어떻게 해결하시나요? - [ ] 특히 불변성이나 순수 함수의 사용이 성능에 미치는 영향에 대해 어떻게 대처하시나요? - [ ] 성능 최적화를 위해 사용한 기법이나 패턴이 있나요? ### **Protocol-Oriented Programming (POP)**: Leveraging protocols in Swift, protocol extensions. - [ ] 1. 프로토콜 지향 프로그래밍(POP)을 사용하여 어떻게 앱의 유지보수성과 확장성을 개선할 수 있을까요? - [ ] 구체적인 예시로 어떤 상황에서 POP가 유용한지 설명해주시겠어요? - [ ] 2. Swift의 프로토콜과 클래스 기반 프로그래밍 간의 주요 차이점은 무엇인가요? - [ ] 이러한 차이점이 실제 프로젝트에 어떤 영향을 미칠 수 있나요? - [ ] 3. 프로토콜 확장(Protocol Extensions)을 사용할 때의 장점과 단점은 무엇인가요? - [ ] 프로토콜 확장을 사용할 때 주의해야 할 점은 무엇인가요? - [ ] 4. Swift에서 POP를 사용하여 코드 재사용성을 어떻게 향상시킬 수 있나요? - [ ] 코드 재사용성을 높이기 위해 주로 어떤 방식으로 프로토콜을 설계하나요? - [ ] 5. 프로토콜 지향 프로그래밍에서 다형성을 구현하는 방법과 그 효과는 무엇인가요? - [ ] POP를 이용한 다형성이 클래스 기반 상속과 비교했을 때 어떤 장점을 가지나요? - [ ] 6. 프로토콜을 사용하여 의존성 역전 원칙(Dependency Inversion Principle)을 어떻게 구현할 수 있나요? - [ ] 이를 통해 어떤 구체적인 이점을 얻을 수 있나요? - [ ] 7. 프로토콜을 활용한 유닛 테스트의 장점은 무엇이며, 어떻게 구현할 수 있나요? - [ ] 프로토콜 기반의 유닛 테스트가 전통적인 방식과 비교하여 가지는 장점은 무엇인가요? - [ ] 8. Swift에서 프로토콜과 제네릭을 결합하여 사용하는 경우, 어떤 추가적인 이점을 얻을 수 있나요? - [ ] 제네릭과 프로토콜을 함께 사용할 때의 주의점은 무엇인가요? - [ ] 9. 프로토콜 지향 프로그래밍을 사용할 때 발생할 수 있는 공통적인 문제점과 해결 방안은 무엇인가요? ### **Declarative Programming**: Understanding the declarative nature of SwiftUI. - [ ] 1. SwiftUI의 선언적 프로그래밍 접근 방식이 기존의 명령형 UI 프레임워크와 어떻게 다른가요? - [ ] 이러한 차이가 앱의 UI 개발에 어떤 실질적인 영향을 미칠까요? - [ ] 2. SwiftUI에서 선언적 프로그래밍이 UI의 재사용성과 유지보수를 어떻게 향상시킬 수 있나요? - [ ] 구체적인 예시로 설명해주시겠어요? - [ ] 3. SwiftUI의 선언적 프로그래밍이 앱의 접근성(Accessibility) 향상에 어떻게 기여하나요? - [ ] 접근성을 높이는 데 있어서 선언적 프로그래밍이 가지는 장점은 무엇인가요? ## iOS Frameworks and APIs ### **User Interface**: UIKit, SwiftUI. - [ ] 1. Auto Layout을 사용하여 다양한 화면 크기와 방향에 대응하는 UI를 구현할 때, 어떤 전략을 사용하셨나요? - [ ] 특정 복잡한 레이아웃을 구현하면서 겪었던 도전과 그 해결 방법은 무엇이었나요? - [ ] 2. UIKit에서 커스텀 컴포넌트를 개발한 경험이 있으신가요? 이 과정에서 중요하게 고려했던 요소들은 무엇이었나요? - [ ] 커스텀 컴포넌트 개발 시 성능과 사용성 측면에서 어떤 점을 주의하셨나요? - [ ] 3. 대규모 데이터를 다루는 UITableView 또는 UICollectionView의 성능 최적화 방법에 대해 설명해주실 수 있나요? - [ ] 성능 최적화를 위해 구현한 구체적인 기술이나 기법은 무엇이었나요? - [ ] 4. 멀티 터치와 제스처 인식을 사용한 복잡한 인터랙션을 구현한 경험이 있나요? 그 과정에서 어떤 기술적 과제를 마주쳤나요? - [ ] 이러한 인터랙션을 구현하며 사용자 경험에 어떤 영향을 미쳤나요? - [ ] 5. 다국어 지원과 다양한 지역 설정을 고려한 UI 개발 경험이 있나요? 이를 위해 어떤 접근 방식을 취하셨나요? - [ ] 다국어 및 지역 설정을 고려할 때 겪었던 주요 도전과 해결 방안은 무엇이었나요? - [ ] 6. 애니메이션과 시각적 효과를 이용하여 사용자 경험을 향상시킨 사례를 공유해주실 수 있나요? - [ ] 이러한 애니메이션을 구현하면서 성능상의 고려사항은 무엇이었나요? - [ ] 7. UIViewController의 생명주기를 활용한 복잡한 데이터 관리나 상태 변화 처리 경험을 말씀해주실 수 있나요? - [ ] 특정 생명주기 단계에서 발생한 문제를 어떻게 해결하셨나요? - [ ] 8. 대규모 프로젝트에서 UI 컴포넌트의 재사용성과 모듈화를 위해 어떤 전략을 사용하셨나요? - [ ] 이러한 전략을 통해 어떤 이점을 얻었나요? 어떤 어려움이 있었나요? - [ ] 9. 앱의 접근성(Accessibility) 기능을 향상시키기 위해 UIKit을 어떻게 활용하셨나요? - [ ] 접근성을 개선하기 위해 구현한 구체적인 기능이나 기술은 무엇이었나요? - [ ] 10. 다크 모드 지원을 위해 기존의 UIKit 기반 UI를 어떻게 수정하셨나요? - [ ] 다크 모드 적용 과정에서 어떤 디자인 및 기술적 고려사항이 있었나요? - [ ] 11. 동적 폰트 크기 조정과 같은 Dynamic Type을 구현하여 앱의 접근성을 개선한 경험이 있나요? - [ ] 이를 구현하며 고려해야 했던 UI/UX 측면의 주요 사항은 무엇이었나요? - [ ] 12. 화면 방향 변경(가로/세로 모드)에 따른 UI 레이아웃 변화를 어떻게 관리하셨나요? - [ ] 가로/세로 모드 전환 시 UI가 겪는 주요 문제들은 무엇이었고, 이를 어떻게 해결하셨나요? - [ ] 13. 네트워크 상태나 데이터 로딩에 따른 UI 변화를 관리하기 위해 어떤 방법을 사용하셨나요? - [ ] 예를 들어, 데이터 로딩 중에는 어떤 UI 요소를 표시하셨나요? - [ ] 14. 다양한 화면 크기에 대응하기 위해 Size Classes를 어떻게 활용하셨나요? - [ ] Size Classes를 사용하여 구현한 가장 복잡한 레이아웃은 무엇이었나요? - [ ] 15. UIKit에서 비동기 UI 업데이트를 관리하는 방법에 대해 설명해주실 수 있나요? - [ ] 비동기 작업 중 UI 업데이트를 처리하면서 겪었던 어려움과 그 해결 방법은 무엇이었나요? - [ ] 16. 커스텀 애니메이션을 사용하여 사용자 인터랙션을 강화한 경험이 있나요? 구체적으로 어떤 애니메이션을 구현하셨고, 그 과정에서 어떤 기술적 고려사항이 있었나요? - [ ] 17. 다양한 디바이스의 화면 해상도와 밀도를 고려하여 이미지와 미디어 자산을 어떻게 관리하셨나요? - [ ] 이미지 해상도와 파일 크기 최적화를 위해 사용한 기술이나 방법론은 무엇이었나요? - [ ] 18. 뷰 컨트롤러 간의 데이터 전달 및 통신을 어떻게 관리하셨나요? - [ ] 데이터를 전달하는 데 사용한 패턴이나 기법은 무엇이었나요? - [ ] 19. 대용량 컨텐츠가 포함된 UIScrollView 또는 그 하위 클래스를 효율적으로 관리하는 방법에 대해 설명해주실 수 있나요? - [ ] 스크롤 성능 최적화를 위해 적용한 기술이나 전략은 무엇이었나요? - [ ] 20. 스토리보드와 XIBs를 사용하여 UI를 구성하는 과정에서 겪었던 주요 도전과 그 해결 방안은 무엇이었나요? - [ ] 스토리보드와 XIBs의 장단점은 어떻게 평가하시나요? - [ ] 21. UI 테스트와 디버깅을 위해 어떤 도구나 방법을 사용하셨나요? - [ ] UI 버그를 식별하고 해결하는 과정에서 가장 효과적이었던 접근 방식은 무엇이었나요? - [ ] 22. 키보드가 활성화될 때 UI 요소들의 배치를 어떻게 조정하셨나요? - [ ] 키보드로 인해 가려지는 UI 요소를 다루는 방법에 대해 설명해주실 수 있나요? - [ ] 23. UIKit과 SwiftUI를 사용한 경험에서, 각각의 프레임워크가 제공하는 장단점은 무엇이라고 생각하시나요? - [ ] 특정 프로젝트에서 UIKit 또는 SwiftUI를 선택한 결정적인 이유는 무엇이었나요? - [ ] 24. SwiftUI를 사용하여 복잡한 사용자 인터페이스를 구현한 경험이 있으신가요? 그 과정에서 어떤 도전을 겪었나요? - [ ] SwiftUI의 어떤 특성이나 기능이 그 도전을 극복하는 데 도움이 되었나요? - [ ] 25. UIKit과 SwiftUI를 함께 사용하여 하이브리드 앱을 개발한 경험이 있나요? 이러한 접근 방식에서 어떤 이점을 발견하셨나요? - [ ] 두 프레임워크를 통합할 때 어떤 기술적 어려움이 있었나요? - [ ] 26. SwiftUI의 선언적 UI 접근 방식이 앱의 사용자 경험에 어떤 영향을 미쳤나요? - [ ] 선언적 UI를 통해 어떤 사용자 인터페이스 문제를 해결하거나 개선할 수 있었나요? - [ ] 27. SwiftUI의 데이터 바인딩 및 상태 관리에 대해 어떻게 이해하고 계시나요? 이를 통해 어떤 문제를 해결할 수 있었나요? - [ ] 데이터 바인딩과 상태 관리의 구현에서 어려움을 겪었던 경험이 있다면, 그 상황과 해결 방법은 무엇이었나요? - [ ] 28. UIKit과 SwiftUI 중 어느 것이 애니메이션과 트랜지션을 구현하는 데 더 유리하다고 생각하시나요? 그 이유는 무엇인가요? - [ ] 구체적인 애니메이션 또는 트랜지션 구현 사례를 들어 설명해주실 수 있나요? - [ ] 29. SwiftUI의 ViewModifier를 사용한 커스텀 뷰 구현 경험이 있나요? 이를 통해 어떤 사용자 경험을 개선하셨나요? - [ ] ViewModifier를 사용할 때 고려해야 할 성능 관련 사항은 무엇이었나요? - [ ] 30. UIKit 기반의 기존 프로젝트를 SwiftUI로 마이그레이션한 경험이 있나요? 그 과정에서 어떤 전략을 사용하셨나요? - [ ] 마이그레이션 과정에서 마주친 주요 어려움과 해결 방법은 무엇이었나요? - [ ] 31. SwiftUI의 State와 Binding을 사용하여 상태 관리를 어떻게 구현하셨나요? 이를 통해 어떤 사용자 인터랙션 문제를 해결할 수 있었나요? - [ ] 32. SwiftUI에서 List 또는 ScrollView를 사용하여 대규모 데이터를 표시한 경험이 있나요? 이를 구현하면서 성능 최적화를 위해 취한 조치는 무엇이었나요? - [ ] 33. SwiftUI의 ViewModifier를 사용하여 재사용 가능한 커스텀 뷰를 어떻게 구축하셨나요? 이러한 방식이 기존의 뷰 구축 방식에 비해 어떤 이점을 제공했나요? - [ ] 34. SwiftUI의 EnvironmentObject를 사용하여 앱 전반에 걸쳐 데이터를 공유하는 방법에 대해 설명해주실 수 있나요? 이 방법이 앱의 데이터 흐름에 어떤 영향을 미쳤나요? - [ ] 35. SwiftUI와 Combine을 함께 사용하여 비동기 작업을 처리한 경험이 있나요? 이러한 접근 방식이 앱의 반응성과 사용자 경험에 어떤 영향을 미쳤나요? - [ ] 36. SwiftUI의 Previews 기능을 활용하여 다양한 디바이스 및 상태에서 UI를 어떻게 테스트하셨나요? 이 기능이 UI 개발 과정에서 어떤 이점을 제공했나요? - [ ] 37. SwiftUI의 .onAppear 및 .onDisappear 수정자를 사용하여 뷰의 생명 주기 이벤트를 관리한 방법에 대해 설명해주실 수 있나요? 이를 통해 해결하고자 했던 문제는 무엇이었나요? - [ ] 38. SwiftUI의 GeometryReader를 사용하여 동적인 레이아웃을 구현한 경험이 있나요? 이 도구를 사용하여 어떤 유형의 UI 문제를 해결했나요? - [ ] 39. SwiftUI를 사용하여 복잡한 데이터 흐름 및 상태 관리를 어떻게 구현하셨나요? 특히, 여러 뷰에 걸쳐 데이터를 동기화하는 방법에 대해 설명해주실 수 있나요? ### **Data Management**: Core Data, iCloud integration, UserDefaults, Keychain. - [ ] 1. Core Data를 사용하여 대규모 데이터 세트를 관리할 때 성능 최적화를 위해 어떤 전략을 사용하셨나요? - [ ] 성능 최적화를 위해 사용한 특정 코어 데이터 API는 무엇이었나요? - [ ] 이러한 전략을 적용한 후 어떤 개선점을 관찰하셨나요? - [ ] 2. iCloud와 Core Data의 통합을 구현할 때 어떤 도전 과제에 직면했고, 이를 어떻게 해결하셨나요? - [ ] iCloud 동기화 과정에서 데이터 충돌이 발생했을 때 어떻게 처리하셨나요? - [ ] iCloud 통합을 통해 얻은 사용자 경험상의 이점은 무엇이었나요? - [ ] 3. UserDefaults를 사용하여 사용자 설정을 저장하는 경우, 어떤 데이터를 UserDefaults에 저장하기로 결정하셨나요? - [ ] UserDefaults를 사용할 때 보안상의 고려사항은 어떤 것들이 있었나요? - [ ] 4. 앱 내에서 사용자의 민감한 정보를 보호하기 위해 Keychain을 어떻게 활용하셨나요? - [ ] Keychain을 사용하여 데이터 보안을 강화한 구체적인 사례를 설명해주실 수 있나요? - [ ] 5. Core Data와 UserDefaults 간에 어떤 경우에 각각을 선택하시나요? 그 기준은 무엇인가요? - [ ] 특정 상황에서 Core Data 대신 UserDefaults를 선택한 경험이 있다면, 그 이유와 결과는 어떠했나요? - [ ] 6. 데이터 마이그레이션을 처리할 때 Core Data의 버전 관리를 어떻게 다루셨나요? - [ ] 데이터 모델의 변경이 필요할 때, 이를 어떻게 관리하고 사용자에게 어떤 영향을 미쳤나요? - [ ] 7. 멀티 스레딩 환경에서 Core Data를 안전하게 사용하기 위한 전략은 무엇이었나요? - [ ] 병렬 처리 중 Core Data의 동시성 문제를 해결한 경험을 공유해주실 수 있나요? - [ ] 8. iCloud와의 통합 과정에서 사용자 데이터의 백업 및 복원 전략은 어떻게 세우셨나요? - [ ] 사용자가 새 기기로 전환했을 때 데이터 복원 과정에서 마주친 어려움과 해결 방법은 무엇이었나요? ### **Networking**: URLSession, OAuth, API Integration. - [ ] 1. URLSession을 사용하여 복잡한 네트워킹 요청을 처리한 경험이 있나요? 그 과정에서 어떤 도전을 겪었고, 어떻게 해결했나요? - [ ] 이 경험을 통해 URLSession의 어떤 기능이 가장 유용하다고 느꼈나요? - [ ] 2. URLSession을 사용할 때 비동기 프로그래밍과 관련하여 어떤 접근 방식을 사용하셨나요? - [ ] 이러한 접근 방식을 선택한 이유는 무엇인가요? - [ ] 비동기 프로그래밍에서 마주쳤던 가장 큰 어려움은 무엇이었나요? - [ ] 어려움을 극복하기 위해 사용한 전략은 무엇이었나요? - [ ] 3. OAuth 인증 방식을 구현할 때 가장 중요하다고 생각하는 보안 측면은 무엇인가요? 그리고 그 이유는 무엇인가요? - [ ] OAuth를 구현하면서 겪었던 가장 큰 보안 관련 문제는 무엇이었나요? - [ ] 4. API 통합 프로젝트에서 가장 어려웠던 부분은 무엇이었나요? 그 상황을 어떻게 극복했나요? - [ ] 이 과정에서 배운 교훈은 무엇인가요? - [ ] 5. URLSession과 다른 네트워킹 라이브러리(예: Alamofire)를 비교한다면, 어떤 경우에 각각을 선호하시나요? - [ ] 선호하는 이유에는 어떤 기술적 고려사항이 포함되나요? - [ ] 6. OAuth를 사용한 인증에서 가장 중요하게 고려해야 할 사용자 경험(UX) 요소는 무엇이라고 생각하시나요? - [ ] 7. 다양한 API를 통합할 때 발생하는 데이터 형식의 불일치를 어떻게 처리하셨나요? - [ ] 이러한 불일치를 해결하기 위해 사용한 기술적 방법은 무엇인가요? - [ ] 이 과정에서 발생할 수 있는 다른 문제점은 무엇이며, 이를 어떻게 예방하거나 해결할 수 있을까요? - [ ] 8. Alamofire와 같은 외부 네트워킹 라이브러리의 사용을 고려하지 않을 때의 주된 이유는 무엇인가요? - [ ]외부 라이브러리를 사용하지 않을 때의 장단점은 무엇이라고 생각하시나요? - [ ] 10. 에러 핸들링 전략을 개발할 때 사용자 경험(UX) 측면에서 고려하는 요소는 무엇인가요? - [ ] 에러 핸들링 과정에서 UX를 향상시키기 위해 취한 조치는 무엇인가요? - [ ] 11. URLSession을 사용한 성능 최적화 과정에서 메모리 관리는 어떻게 다루셨나요? - [ ] 메모리 관리에 대한 접근 방식은 어떻게 결정하셨나요? - [ ] 메모리 사용 최적화를 위해 적용한 기술적 방법은 무엇인가요? ### **Concurrency**: Grand Central Dispatch (GCD), Operation Queues, Swift Concurrency. - [ ] 1. Grand Central Dispatch와 Operation Queues를 사용하는 상황에서 어떤 경우에 각각을 선택하시나요? 그 선택의 이유는 무엇인가요? - [ ] 이 두 방식을 선택할 때 고려하는 가장 중요한 요소는 무엇인가요? - [ ] 2. Swift Concurrency의 도입이 기존의 비동기 프로그래밍 접근 방식에 어떤 영향을 미쳤다고 생각하시나요? - [ ] 이 변화가 실제 프로젝트에 어떻게 적용되었나요? - [ ] 3. 복잡한 멀티스레딩 환경에서 발생한 가장 기억에 남는 문제는 무엇이었나요? 그 문제를 어떻게 해결하셨나요? - [ ] 4. GCD와 Operation Queues 중 어느 것이 더 성능적으로 우수하다고 생각하시나요? 그 이유는 무엇인가요? - [ ] 특정 상황에서 이들 중 하나를 선호하는 경우는 어떤 것이 있나요? - [ ] 5. Swift Concurrency를 사용하여 동시성 문제를 해결할 때 가장 중요하게 생각하는 측면은 무엇인가요? - [ ] Swift Concurrency를 도입함으로써 어떤 혜택을 경험하셨나요? - [ ] 6. 동시성 프로그래밍에서 발생하는 일반적인 문제점들을 어떻게 예방하고 해결하시나요? - [ ] 이러한 문제를 해결하기 위해 사용한 구체적인 기술 또는 패턴은 무엇인가요? - [ ] 7. GCD의 Dispatch Queues를 사용할 때, 어떤 경우에 Serial과 Concurrent Queue를 각각 사용하시나요? - [ ] 이러한 결정을 내릴 때 어떤 요소를 고려하시나요? - [ ] 8. Operation Queues를 사용하여 복잡한 의존성 관계를 가진 작업들을 관리한 경험이 있나요? 그 과정에서 어떤 전략을 사용하셨나요? - [ ] 9. Swift의 async/await 패턴을 사용한 경험에서, 기존의 GCD 또는 Operation Queues 방식과 비교했을 때 어떤 장단점을 경험하셨나요? - [ ] 이 패턴을 적용함으로써 코드의 가독성이나 유지보수성에 어떤 변화가 있었나요? - [ ] 10. GCD의 DispatchQueue를 활용하여 병렬 처리를 구현할 때 주의해야 할 점은 무엇인가요? - [ ] 병렬 처리를 구현하면서 겪은 성능상의 문제와 그 해결 방법은 무엇인가요? - [ ] 11. Operation과 Operation Queue를 사용하여 복잡한 비동기 작업 흐름을 설계한 경험이 있나요? 그 과정에서 어떤 설계 결정을 내렸고, 왜 그렇게 결정했나요? - [ ] 12. Swift Concurrency의 주요 기능 중 하나인 Task Groups을 사용한 경험이 있나요? 이를 활용하여 어떤 문제를 해결하셨나요? - [ ] Task Groups를 사용할 때 주의해야 할 사항은 무엇인가요? - [ ] 13. GCD를 사용하여 데이터 레이스(data race) 문제를 해결한 경험이 있나요? 그 상황을 설명해 주실 수 있나요? - [ ] 데이터 레이스를 예방하기 위해 사용한 구체적인 기술이나 전략은 무엇인가요? - [ ] 14. Swift Concurrency에서 제공하는 structured concurrency가 기존의 비구조화된 동시성 처리 방식과 비교했을 때 어떤 이점이 있나요? - [ ] 16. GCD의 dispatch barriers를 사용하여 동시 읽기/쓰기 문제를 해결한 경험이 있나요? 그 상황에서 어떻게 barriers를 효과적으로 사용하셨나요? - [ ] 17. Swift Concurrency의 actor 모델을 사용하여 상태 관리 및 동시성 문제를 해결한 경험이 있나요? 구체적인 사례를 설명해 주실 수 있나요? - [ ] actor 모델을 사용함으로써 기존 코드에 어떤 변화를 주어야 했나요? - [ ] 18. Operation Queues를 사용하여 취소 가능한 작업 흐름을 구현한 경험이 있나요? 그 과정에서 어떤 설계 결정이 중요했나요? - [ ] 19. GCD를 이용하여 시간이 많이 소요되는 작업을 백그라운드에서 처리한 경험에 대해 말씀해 주실 수 있나요? - [ ] 백그라운드 작업 중 어떻게 사용자에게 진행 상황을 표시하셨나요? - [ ] 20. Swift Concurrency를 사용하여 네트워크 요청과 같은 비동기 작업을 처리한 경험이 있나요? 이때 어떤 패턴이나 전략을 사용하셨나요? - [ ] 22. Swift Concurrency의 async/await와 traditional completion handlers를 비교해본다면, 어떤 상황에서 각각을 선호하시나요? - [ ] 23. GCD를 사용하여 앱의 성능을 최적화한 경험에 대해 말씀해 주실 수 있나요? 특히, 어떤 성능 측정 기법을 사용하셨나요? - [ ] 24. Swift Concurrency를 사용할 때, 주요 메모리 관리 문제는 무엇이며, 이를 어떻게 해결하셨나요? - [ ] 25. GCD의 custom dispatch queue를 생성하여 사용한 경험이 있나요? 그 상황에서 custom queue가 제공한 이점은 무엇이었나요? - [ ] 26. Operation Queues의 우선순위와 종속성을 활용하여 작업 순서를 제어한 경험이 있나요? 구체적인 상황을 설명해 주실 수 있나요? - [ ] 28. GCD를 사용하여 대용량 데이터 처리 작업을 최적화한 경험이 있나요? 그 과정에서 어떤 전략을 사용하셨나요? - [ ] 30. Swift Concurrency에서 발생할 수 있는 교착 상태(deadlock)를 해결한 경험이 있나요? 그 상황을 어떻게 해결하셨나요? - [ ] 교착 상태를 예방하기 위한 주요 전략은 무엇인가요? - [ ] 31. GCD의 group을 사용하여 여러 비동기 작업을 동기화한 경험이 있나요? 이 방법을 사용한 구체적인 사례는 무엇인가요? - [ ] 이러한 접근 방식이 프로젝트에 어떤 이점을 가져왔나요? ### **Combine Framework**: For reactive programming. - [ ] 1. Combine Framework을 사용하여 비동기 프로그래밍을 구현할 때 가장 중요하다고 생각하는 개념은 무엇이며, 그 이유는 무엇인가요? - [ ] 이 개념을 사용하여 구현한 구체적인 사례를 들어줄 수 있나요? - [ ] 2. Combine과 기존의 비동기 프로그래밍 방식(예: Callbacks, Promises)과의 주요 차이점은 무엇이라고 생각하나요? - [ ] 3. Combine에서 Publisher와 Subscriber의 관계를 어떻게 이해하고 있나요? - [ ] Publisher와 Subscriber 사이의 데이터 흐름을 제어하는 방법에는 어떤 것들이 있나요? - [ ] 4. Combine을 사용할 때 메모리 관리는 어떻게 다뤄야 한다고 생각하나요? - [ ] Combine을 사용하면서 메모리 누수를 방지하기 위한 전략에는 어떤 것들이 있나요? - [ ] 5. Combine에서 제공하는 다양한 Operators의 사용 예를 들 수 있나요? - [ ] 특정 Operator를 선택하는 기준은 무엇인가요? - [ ] 6. Combine을 사용하여 네트워킹 작업을 처리하는 경우, 어떤 방식으로 에러 핸들링을 구현하나요? - [ ] 네트워크 요청의 성공과 실패를 처리하는 구체적인 예시를 설명해줄 수 있나요? - [ ] 7. Combine의 backpressure 개념에 대해 설명해줄 수 있나요? - [ ] 실제 프로젝트에서 backpressure를 관리한 경험이 있나요? - [ ] 8. SwiftUI와 Combine을 함께 사용하는 경우, 어떤 이점이 있다고 생각하나요? - [ ] 9. Combine에서의 고급 사용 사례를 제시할 수 있나요? 예를 들면, custom Publisher나 Operator의 구현 등이 있겠습니다. - [ ] 이러한 고급 기능을 구현하면서 겪었던 도전과 해결 방안에 대해 이야기해줄 수 있나요? ### **Push Notifications**: Integration and handling. - TBA ## Architectural Patterns and Design Patterns ### **MVC**: Model-View-Controller. - [ ] 1. MVC 패턴에서 Model, View, Controller의 각각의 역할은 무엇이며, 이들이 상호작용하는 방식을 설명해주시겠어요? - [ ] Model의 데이터 변화가 View에 어떻게 반영되는지 구체적인 예를 들어 설명해주시겠어요? - [ ] Controller가 Model과 View 사이에서 어떤 중개 역할을 하는지 예시를 들어 설명해주시겠어요? - [ ] 2. MVC 패턴을 사용할 때의 장단점은 무엇이라고 생각하시나요? - [ ] 이 패턴의 장점을 극대화하기 위해 어떤 프로젝트 상황에서 주로 사용하시나요? - [ ] 단점을 최소화하기 위한 방안은 무엇이 있을까요? - [ ] 3. MVC 패턴을 실제 프로젝트에 적용했을 때 겪었던 어려움이나 도전은 무엇이었나요? - [ ] 이러한 어려움을 극복하기 위해 어떤 해결책을 모색했나요? - [ ] 4. 다른 디자인 패턴(예: MVP, MVVM)과 MVC를 비교한다면 어떤 차이점과 각각의 적합한 사용 사례가 있을까요? - [ ] 특정 상황에서 MVC 대신 다른 패턴을 선택한 경험이 있다면 그 이유는 무엇이었나요? - [ ] 5. MVC 패턴의 'View' 부분에서 사용자 인터페이스의 변경이 필요할 때, Model이나 Controller에 어떠한 영향을 미치나요? - [ ] 이러한 변경이 있을 때, 전체 시스템에 미치는 영향을 최소화하기 위한 방법은 무엇인가요? - [ ] 6. 대규모 팀에서 MVC 패턴을 사용할 때 발생할 수 있는 협업상의 문제점과 이를 해결하기 위한 방안은 무엇인가요? - [ ] 특히 View와 Model이 서로 간섭하지 않도록 관리하는 방법에 대해 설명해주시겠어요? - [ ] 7. MVC 패턴을 사용하는 동안 유지보수 및 확장성에 관련한 문제에 어떻게 대처하셨나요? - [ ] 특히 확장성 측면에서 MVC 패턴의 한계를 어떻게 극복하려고 시도했나요? ### **MVVM**: Model-View-ViewModel. - [ ] 1. MVVM 아키텍처를 iOS 애플리케이션에 적용할 때 가장 큰 이점은 무엇이라고 생각하시나요? - [ ] MVVM을 사용함으로써 겪었던 구체적인 개선 사례를 하나 말씀해주실 수 있나요? - [ ] 2. MVVM을 도입하면서 MVC와 비교했을 때 겪었던 주요한 도전 과제는 무엇이었나요? - [ ] 이러한 도전을 어떻게 극복하셨나요? - [ ] 3. View와 ViewModel 사이의 데이터 바인딩을 구현하는 데 있어서 선호하는 방식이나 도구가 있나요? - [ ] 그 방식을 선택한 특별한 이유가 있나요? - [ ] 4. MVVM 아키텍처에서 비즈니스 로직과 UI 로직을 분리하는 방법에 대해 설명해주실 수 있나요? - [ ] 이러한 분리가 애플리케이션 개발에 어떤 긍정적 영향을 미쳤나요? - [ ] 5. MVVM 아키텍처를 사용하면서 테스트 용이성이 어떻게 향상되었나요? - [ ] 구체적인 예를 들어 ViewModel의 테스트 방법을 설명해주실 수 있나요? - [ ] 6. MVVM과 다른 아키텍처 패턴들(예: MVC, MVP)과의 결합 또는 통합 경험이 있으신가요? - [ ] 그런 결합이나 통합을 시도한 이유와 그 과정에서의 경험을 말씀해주실 수 있나요? - [ ] 7. MVVM 아키텍처에서의 ViewModel이 Model과의 데이터 동기화를 어떻게 처리하나요? - [ ] 데이터 동기화 과정에서 발생할 수 있는 문제점들과 그 해결 방법에 대해 설명해주실 수 있나요? - [ ] 8. MVVM 아키텍처를 사용할 때 View와 ViewModel 사이의 커뮤니케이션을 어떻게 설계하시나요? - [ ] 이 과정에서 발생할 수 있는 문제점과 이를 해결하는 방법에 대해 설명해주실 수 있나요? - [ ] 9. MVVM 아키텍처 적용 시, 대규모 프로젝트에서의 모듈화와 재사용성을 향상시키기 위한 전략은 무엇인가요? - [ ] 모듈화와 재사용성을 증가시키기 위해 구체적으로 어떤 기술이나 방법을 적용하셨나요? ### **Design Patterns**: Singleton, Observer, Delegate, etc. - TBA ## Testing and Debugging ### **Unit and UI Testing**: Test case development, automated interface testing. - [ ] 1. iOS 앱 개발에서 Unit Test와 UI Test의 주요 차이점은 무엇이며, 어떤 상황에서 각각을 우선적으로 사용하시겠어요? - [ ] 어떤 종류의 앱 기능을 테스트할 때 Unit Test를 선택하고, 어떤 경우에 UI Test를 선호하시나요? - [ ] UI Test를 구현할 때 겪는 가장 큰 도전은 무엇이었고, 이를 어떻게 극복하셨나요? - [ ] 2. iOS 환경에서 효과적인 Unit Testing을 위해 어떤 프레임워크나 라이브러리를 사용하시나요? 그 선택의 이유는 무엇인가요? - [ ] 3. UI Testing을 진행할 때, 자동화된 테스트 케이스를 어떻게 설계하시나요? 테스트의 신뢰성을 보장하기 위해 어떤 요소들을 중점적으로 고려하시나요? - [ ] 4. 복잡한 사용자 인터페이스를 테스트하는 경우, 어떻게 테스트 케이스를 구조화하고 관리하시나요? - [ ] 5. 비동기 작업이 많은 앱에서 Unit Test와 UI Test를 어떻게 관리하고, 동시성 문제에 대처하시나요? - [ ] 6. 테스트 코드의 유지보수성을 높이기 위해 어떤 원칙이나 패턴을 적용하시나요? - [ ] 7. 최근 진행한 프로젝트에서 가장 도전적이었던 테스트 케이스는 무엇이었고, 그 문제를 어떻게 해결하셨나요? - [ ] 8. Continuous Integration (CI) 환경에서 iOS의 Unit 및 UI Testing을 어떻게 통합하고 최적화하시나요? - [ ] 9. Mocking과 Stubbing을 사용하여 iOS 앱의 Unit Test를 어떻게 향상시키시나요? 구체적인 예를 들어 설명해주시겠어요? - [ ] Mocking 또는 Stubbing을 구현할 때, 어떤 도구나 라이브러리를 선호하시나요? - [ ] 이러한 방법을 사용함으로써 겪은 어려움은 무엇이었고, 어떻게 극복하셨나요? - [ ] 10. 테스트 케이스 작성 시, 코드 커버리지를 어떻게 측정하고, 이상적인 커버리지 수준을 어떻게 설정하시나요? - [ ] 11. Accessibility를 고려한 UI Testing은 어떻게 진행하시나요? 이 과정에서 중점적으로 확인하는 요소들은 무엇인가요? ### **Debugging Techniques**: Breakpoints, LLDB. - [ ] 1. iOS 애플리케이션 개발 시 가장 효과적으로 사용하는 디버깅 기법은 무엇인가요? - [ ] 해당 기법을 선호하는 특별한 이유가 있나요? - [ ] 2. Xcode에서 제공하는 다양한 종류의 브레이크포인트 중에서 특히 자주 사용하는 것은 무엇인가요? - [ ] 그 브레이크포인트를 사용하는 구체적인 상황을 예로 들어 설명해주실 수 있나요? - [ ] 3. LLDB 커맨드 라인을 사용하여 디버깅하는 과정에서 가장 유용했던 명령어는 무엇이었나요? - [ ] 해당 명령어를 사용해 해결한 구체적인 문제 사례를 설명해주실 수 있나요? - [ ] 4. 애플리케이션에서 발생한 크래시를 디버깅할 때 주로 어떤 접근 방식을 사용하시나요? - [ ] 크래시 로그를 분석하는 데 있어서 중점을 두는 부분은 무엇인가요? - [ ] 5. 조건부 브레이크포인트(Conditional Breakpoints)를 설정하여 특정 상황에서만 코드 실행을 중단하는 방법에 대해 설명해주실 수 있나요? - [ ] 조건부 브레이크포인트를 활용한 효과적인 디버깅 사례를 하나 말씀해주실 수 있나요? - [ ] 6. 메모리 누수나 성능 문제를 진단할 때 사용하는 디버깅 기법은 무엇인가요? - [ ] 이러한 문제를 진단하고 해결한 경험을 공유해주실 수 있나요? - [ ] 7. 시뮬레이터 또는 실제 디바이스에서 디버깅을 할 때, 각각의 장단점은 무엇이라고 생각하시나요? - [ ] 특정 상황에서 한쪽을 선호하는 이유는 무엇인가요? - [ ] 8. 네트워크 요청과 응답을 디버깅하는 데 사용하는 기법이나 도구는 무엇인가요? - [ ] 네트워크 디버깅 과정에서 주의해야 할 점은 무엇인가요? - [ ] 9. 애플리케이션의 멀티스레드 환경에서 발생하는 이슈를 디버깅하는 방법은 무엇인가요? - [ ] 멀티스레딩 관련 디버깅에서 가장 어려웠던 문제는 무엇이었나요? - [ ] 10. LLDB의 파이썬 스크립팅 기능을 사용하여 디버깅 프로세스를 자동화한 경험이 있나요? - [ ] 이 기능을 사용하여 어떤 문제를 해결하거나 어떤 프로세스를 개선했나요? - [ ] 11. Xcode의 'Exception Breakpoint'를 설정하여 예외 발생 시점을 찾는 방법에 대해 설명해주실 수 있나요? - [ ] 이 기능을 사용하여 어떤 종류의 버그를 해결한 경험이 있나요? - [ ] 12. 'Symbolic Breakpoint'를 사용하는 방법과 그것이 디버깅 과정에서 어떻게 도움이 되는지 설명해주실 수 있나요? - [ ] 심볼릭 브레이크포인트를 설정할 때 주의해야 할 점은 무엇인가요? - [ ] 13. LLDB에서 'watchpoint'를 설정하고 활용하는 방법에 대해 설명해주실 수 있나요? - [ ] 변수 값의 변화를 모니터링하는 과정에서 특별히 유용했던 사례가 있나요? - [ ] 14. LLDB를 사용하여 애플리케이션의 메모리 상태를 진단하는 방법에 대해 설명해주실 수 있나요? - [ ] 메모리 관련 이슈를 진단할 때 주로 사용하는 LLDB 명령어는 무엇인가요? - [ ] 15. 'Zombie Objects'를 찾기 위해 Xcode의 디버깅 도구를 어떻게 사용하시나요? - [ ] 좀비 객체를 추적하여 해결한 구체적인 사례를 설명해주실 수 있나요? - [ ] 16. 런타임에서 발생하는 UI 문제를 디버깅하기 위해 어떤 접근 방식을 사용하시나요? - [ ] UI 디버깅 과정에서 특히 유의해야 할 점은 무엇인가요? - [ ] 17. LLDB의 'breakpoint set' 명령어를 사용하여 조건에 따른 브레이크포인트를 설정하는 방법을 설명해주실 수 있나요? - [ ] 조건부 브레이크포인트를 효과적으로 사용한 사례가 있나요? - [ ] 18. Xcode의 'Visual Memory Debugger'를 사용하여 메모리 그래프를 분석하는 방법에 대해 설명해주실 수 있나요? - [ ] 메모리 그래프 분석을 통해 발견한 주요 문제점은 무엇이었나요? - [ ] 19. 앱의 배포 후 사용자 환경에서 발생하는 이슈를 디버깅하기 위해 어떤 도구나 기법을 사용하시나요? - [ ] 실제 사용자 환경에서의 버그를 추적하고 해결하는 과정에서 겪은 어려움은 무엇이었나요? - [ ] 20. LLDB에서 사용되는 'expression' 명령어를 통해 코드를 런타임에 수정하고 테스트하는 방법에 대해 설명해주실 수 있나요? - [ ] 이 방법을 사용해 문제를 해결한 경험을 공유해주실 수 있나요? - [ ] 21. Xcode의 'Address Sanitizer'를 활용하여 메모리 오류를 디버깅하는 방법에 대해 설명해주실 수 있나요? - [ ] 'Address Sanitizer'를 사용하여 찾아낸 메모리 오류의 예를 들어주실 수 있나요? ## Performance Optimization ### **Memory Management**: Understanding ARC, identifying memory leaks. - [ ] 1. ARC(Automatic Reference Counting)가 메모리 관리에 어떻게 도움이 되는지 설명해 주시겠어요? - [ ] ARC의 주요 작동 원리는 무엇이며, 이전의 수동 참조 카운팅과 어떤 차이가 있나요? - [ ] 2. 메모리 누수를 식별하는 과정에서 어떤 도구나 기법을 주로 사용하나요? - [ ] 실제로 메모리 누수를 경험했을 때, 그 문제를 어떻게 해결했는지 구체적인 예를 들어 설명해 주시겠어요? - [ ] 3. 강한 참조 순환(strong reference cycles)이 발생하는 경우와 이를 방지하기 위한 전략은 무엇인가요? - [ ] weak나 unowned 참조를 사용하는 상황과 그 차이점에 대해 설명해 주시겠어요? - [ ] 4. iOS에서 메모리 관리의 중요성에 대해 어떻게 생각하나요? - [ ] 특히 모바일 환경에서 메모리 관리가 중요한 이유는 무엇이라고 생각하나요? - [ ] 5. 메모리 누수와 관련된 가장 도전적인 문제를 해결한 경험이 있나요? - [ ] 그 상황에서 어떤 분석 방법과 해결책을 적용했었나요? - [ ] 6. GCD(Grand Central Dispatch)와 같은 동시성 프로그래밍이 메모리 관리에 어떤 영향을 미칠 수 있나요? - [ ] 동시성을 다루면서 메모리 누수를 방지하기 위해 주의해야 할 점은 무엇인가요? - [ ] 7. 옵셔널 체이닝과 클로저(closures)가 메모리 관리에 어떤 영향을 미칠 수 있나요? - [ ] 클로저 내에서 발생할 수 있는 메모리 누수를 예방하기 위한 전략은 무엇인가요? - [ ] 8. 실시간으로 높은 메모리 사용량을 감지하고 관리하는 방법은 무엇인가요? - [ ] 9. 메모리 경고(memory warning)를 받았을 때, 어떤 조치를 취하시나요? - [ ] 메모리 경고 처리를 위해 구현한 가장 효과적인 전략이 무엇이었나요? - [ ] 10. Instruments 도구를 사용하여 메모리 성능을 분석한 경험이 있나요? - [ ] 구체적으로 어떤 Instruments 도구를 사용했으며, 어떤 문제를 해결할 수 있었나요? - [ ] 11. ARC 환경에서 retain cycle을 식별하는 방법은 무엇인가요? - [ ] 실제 프로젝트에서 retain cycle을 해결한 경험을 공유해 주시겠어요? - [ ] 12. 메모리 누수를 방지하기 위해 사용하는 디자인 패턴이 있나요? - [ ] 해당 패턴을 선택한 이유와 실제 적용 예시를 설명해 주시겠어요? - [ ] 13. 메모리 관리 관점에서 볼 때, Swift와 Objective-C 간의 주요 차이점은 무엇이라고 생각하나요? - [ ] 14. iOS 애플리케이션에서 대용량 데이터 처리 시 메모리 관리를 어떻게 하시나요? - [ ] 대용량 데이터를 효율적으로 처리하기 위해 사용한 기술이나 전략은 무엇인가요? - [ ] 15. 메모리 관리 측면에서 볼 때, 싱글톤 패턴을 사용할 때 주의해야 할 점은 무엇인가요? - [ ] 싱글톤 패턴을 사용하면서 발생할 수 있는 메모리 이슈를 어떻게 해결하셨나요? - [ ] 16. 메모리 관리를 위해 어떻게 코드를 최적화하시나요? - [ ] 최적화 과정에서 고려해야 할 중요한 점은 무엇이라고 생각하나요? ### **Profiling with Instruments**: For performance analysis. - [ ] 1. Instruments를 사용하여 iOS 애플리케이션의 메모리 누수를 탐지하는 방법에 대해 설명해주시겠어요? - [ ] 메모리 누수를 찾았을 때 어떤 접근 방식으로 문제를 해결하시나요? - [ ] 메모리 누수를 해결한 경험이 있으시다면, 그 사례에 대해 구체적으로 설명해주실 수 있나요? - [ ] 2. 애플리케이션의 CPU 사용률이 높을 때, Instruments를 활용하여 원인을 분석하는 과정을 자세히 설명해주시겠어요? - [ ] CPU 사용률이 높은 원인을 파악한 후, 어떤 최적화 방법을 사용하셨나요? - [ ] 3. Instruments에서 제공하는 다양한 툴 중에서, 퍼포먼스 튜닝에 가장 유용하다고 생각하는 툴은 무엇이고 그 이유는 무엇인가요? - [ ] 4. 애플리케이션의 UI 성능을 개선하기 위해 Instruments를 어떻게 사용하시나요? - [ ] UI 성능과 관련된 문제를 해결한 경험에 대해 구체적인 예를 들어 설명해주실 수 있나요? - [ ] 5. 네트워크 성능 분석을 위해 Instruments를 사용하는 방법에 대해 설명해주실 수 있나요? - [ ] 네트워크 관련 문제를 발견했을 때, 어떤 방식으로 접근하고 해결하시나요? - [ ] 6. Instruments를 사용하여 앱의 배터리 사용 효율을 분석하는 방법에 대해 설명해주실 수 있나요? - [ ] 배터리 사용 효율이 낮은 원인을 파악한 후, 어떤 최적화 조치를 취하셨나요? - [ ] 7. 실시간으로 애플리케이션의 메모리 사용량을 모니터링하는 방법에 대해 Instruments를 통해 어떻게 접근하시나요? - [ ] 8. Core Animation 툴을 사용하여 애플리케이션의 그래픽 성능을 분석하는 방법에 대해 설명해주실 수 있나요? - [ ] 그래픽 성능과 관련된 문제를 해결한 경험이 있으시다면, 그 사례에 대해 설명해주실 수 있나요? - [ ] 9. 애플리케이션의 레이아웃 성능을 분석하기 위해 Instruments의 어떤 기능을 주로 사용하시나요? - [ ] 레이아웃 성능 문제를 해결한 경험이 있다면, 그 과정을 구체적으로 설명해주실 수 있나요? - [ ] 10. 애플리케이션의 실행시간을 분석하기 위해 Instruments의 어떤 기능을 주로 사용하시나요? - [ ] 시작 시간을 단축하는 과정에서 발견한 주요 병목 현상은 무엇이었나요? - [ ] 병목 현상을 해결하기 위해 구체적으로 어떤 조치를 취하셨나요? - [ ] 11. Instruments의 Time Profiler를 사용하여 애플리케이션의 메소드 호출 패턴을 분석하는 방법에 대해 설명해주실 수 있나요? - [ ] 메소드 호출 패턴 분석을 통해 어떤 성능 문제를 해결하셨나요? - [ ] 12. 파일 I/O 성능 문제를 진단하기 위해 Instruments에서 어떤 도구를 사용하시나요? - [ ] I/O 성능 문제를 해결한 경험이 있으시다면, 그 사례에 대해 설명해주실 수 있나요? - [ ] 13. Instruments의 Energy Log를 사용하여 애플리케이션의 에너지 사용량을 분석하는 방법에 대해 설명해주실 수 있나요? - [ ] 에너지 사용량이 비정상적으로 높았던 경우, 어떤 최적화 방법을 적용하셨나요? ## Deployment and Distribution ### **App Store Process**: Basics of app submission and review guidelines. - [ ] 1. 앱 스토어 제출 과정에서 가장 중요하다고 생각하는 단계는 무엇이며, 그 이유는 무엇인가요? - [ ] 이 단계를 관리하는 데 있어서 특별히 주의해야 하는 점은 무엇이 있나요? - [ ] 2. 애플의 앱 리뷰 지침 중 어떤 부분이 iOS 개발자에게 가장 큰 도전이라고 생각하나요? - [ ] 이 지침을 준수하기 위해 어떤 조치를 취했나요? - [ ] 해당 지침을 위반했을 때의 경험이 있다면, 어떻게 해결했나요? - [ ] 3. 앱이 앱 스토어 심사를 통과하지 못했을 때, 개선 계획을 수립하는 과정에서 가장 중요하게 고려하는 요소는 무엇인가요? - [ ] 이 과정에서 팀과의 커뮤니케이션이 어떻게 이루어지나요? - [ ] 4. 사용자의 프라이버시 보호와 관련된 앱 스토어의 지침을 어떻게 준수하고 있나요? - [ ] 프라이버시 관련 지침 준수를 위해 개발 과정에서 어떤 변경을 가했나요? - [ ] 5. 앱 스토어의 심사 지침 변경에 대응하는 방법은 무엇인가요? - [ ] 지침 변경에 신속하게 대응하기 위한 내부 프로세스는 어떻게 구축하고 있나요? - [ ] 6. 앱 스토어 심사 과정에서 피드백을 받고 개선하는 과정에서 가장 효과적이었던 접근 방식은 무엇이었나요? - [ ] 피드백을 통한 개선 과정에서 겪은 주요 어려움은 무엇이었나요? ### **CI/CD**: Basics of Continuous Integration and Deployment. - TBA ## User Experience and Design ### **UI/UX Principles**: Following Apple's design guidelines. - [ ] 1. Apple의 디자인 가이드라인 중에서 iOS 앱 개발 시 가장 중요하다고 생각하는 원칙은 무엇이며, 왜 그렇게 생각하시나요? - [ ] 그 원칙을 어떻게 앱에 적용하셨나요? - [ ] 해당 원칙을 적용함으로써 사용자 경험에 어떤 긍정적인 영향을 봤나요? - [ ] 2. Human Interface Guidelines를 준수하지 않았을 때의 경험이 있으신가요? 그런 상황에서 어떤 문제가 발생했고, 어떻게 해결하셨나요? - [ ] 3. Accessibility에 대해 어떻게 고려하고 계시나요? iOS 앱에서 Accessibility 기능을 향상시키기 위해 사용한 구체적인 기술이나 전략은 무엇인가요? - [ ] 4. 사용자 경험을 향상시키기 위해 가장 최근에 도입한 UI/UX의 변경점은 무엇이었나요? 이 변경이 필요했던 이유와 그 효과는 어떤 것이었나요? - [ ] 5. 다양한 화면 크기와 장치에서 일관된 사용자 경험을 제공하기 위해 어떤 접근 방식을 취하고 계시나요? - [ ] 6. 사용자 피드백을 UI/UX 디자인에 어떻게 통합하시나요? 구체적인 예를 들어 설명해주시겠어요? - [ ] 7. 앱의 UI/UX를 설계할 때 가장 중점을 두는 요소는 무엇이며, 그 이유는 무엇인가요? - [ ] 8. Apple의 디자인 가이드라인을 따르면서도 앱에 독특한 브랜드 아이덴티티를 어떻게 통합하시나요? - [ ] 9. 최신 iOS 버전에서 제공하는 새로운 UI/UX 기능을 어떻게 활용하고 계시나요? 최근에 적용해본 기능에 대해 구체적으로 설명해주시겠어요? - [ ] 10. 성능과 사용자 경험 사이의 균형을 맞추기 위해 어떤 고민을 하시나요? 특히 성능에 영향을 미치는 UI 요소들을 어떻게 최적화하셨나요? - [ ] 11. Dark Mode를 지원하는 과정에서 겪었던 어려움은 무엇이었나요? 사용자들에게 일관된 경험을 제공하기 위해 어떤 조치를 취하셨나요? ### **Accessibility and Localization**: Basic principles. - TBA ## Professional Development ### **Code Reviews**: Improving code quality and collaboration. - [ ] 1. 코드 리뷰 과정에서 발견된 일반적인 코드 품질 문제는 무엇이었나요, 그리고 이를 어떻게 개선하셨나요? - [ ] 특정 문제를 해결하기 위해 도입한 코딩 표준이나 규칙이 있다면 무엇인가요? - [ ] 2. iOS 개발에서 자주 발생하는 성능 관련 이슈를 코드 리뷰를 통해 어떻게 식별하고 해결하셨나요? - [ ] 성능 이슈를 식별하는 데 사용한 도구나 방법은 무엇이었나요? - [ ] 3. 동료 개발자와의 협업을 통해 코드 품질을 향상시키는 데 있어서 가장 중요하다고 생각하는 요소는 무엇인가요? - [ ] 이러한 협업 과정에서 발생할 수 있는 문제를 어떻게 해결하셨나요? - [ ] 4. 코드 리뷰 과정에서 가독성과 유지보수를 개선하기 위해 주로 어떤 접근 방식을 사용하셨나요? - [ ] 가독성과 유지보수성을 높이는 데 효과적이었던 구체적인 사례를 들어 설명해 주시겠어요? - [ ] 5. 팀 내에서 코드 리뷰 문화를 구축하거나 개선하기 위해 어떤 전략을 사용하셨나요? - [ ] 이 전략이 팀의 협업 및 코드 품질에 어떤 긍정적인 영향을 미쳤는지 구체적인 예를 들어 말씀해 주시겠어요? - [ ] 6. 코드 리뷰에서 자주 논의되는 아키텍처와 디자인 패턴에 관한 사항은 무엇인가요, 그리고 이들을 어떻게 적용하여 프로젝트를 개선했나요? - [ ] 특정 아키텍처나 패턴을 채택함으로써 해결된 문제에 대해 설명해 주시겠어요? - [ ] 7. 코드 리뷰 과정에서 발생할 수 있는 의사소통 문제는 어떻게 극복하셨나요? - [ ] 효과적인 커뮤니케이션을 위해 사용한 기술이나 방법은 무엇인가요? ### **Continuous Learning**: Keeping up with new technologies and trends. - [ ] 1. iOS 개발 분야에서 지속적인 학습을 유지하기 위해 어떤 자원이나 채널을 주로 이용하시나요? - [ ] 특정 자원이나 채널을 선호하는 이유는 무엇인가요? - [ ] 2. 새로운 iOS 기술이나 트렌드를 배우는 과정에서 가장 큰 도전은 무엇이었나요? - [ ] 이러한 도전을 어떻게 극복하셨나요? - [ ] 3. 최근에 배우고 적용해본 새로운 iOS 기술이나 트렌드가 있나요? - [ ] 그 기술이나 트렌드를 어떻게 배우고 적용해보셨나요? - [ ] 4. 새로운 iOS 업데이트나 기술 도입 시, 기존 프로젝트에 어떻게 통합하는지 설명해주실 수 있나요? - [ ] 새로운 기술을 통합하는 과정에서 겪은 주요 어려움은 무엇이었나요? - [ ] 5. Swift의 새로운 버전이 나올 때마다 어떤 방식으로 새로운 언어 기능을 학습하시나요? - [ ] 새로운 언어 기능을 실제 프로젝트에 적용해본 경험이 있으시다면, 그 과정은 어떠했나요? - [ ] 6. WWDC나 다른 iOS 관련 컨퍼런스에서 발표되는 새로운 기능이나 API를 어떻게 빠르게 습득하시나요? - [ ] 이러한 정보를 어떻게 자신의 업무나 프로젝트에 적용하시나요? - [ ] 8. 새로운 프로그래밍 패러다임이나 디자인 패턴을 배우고 적용하는 과정에서 어떤 접근 방식을 취하시나요? - [ ] 최근에 배우고 적용해본 새로운 패러다임이나 패턴이 있다면, 그 과정을 설명해주실 수 있나요? - [ ] 9. Swift UI와 같은 새로운 프레임워크를 배우는 과정에서 가장 중요하게 생각하는 것은 무엇인가요? - [ ] Swift UI를 실제 프로젝트에 적용해본 경험이 있으시다면, 그 과정은 어떠했나요? ## Additional Industry Knowledge ### **Mobile App Monetization**: In-app purchases, subscriptions, ad integrations. - TBA ### **App Analytics**: User behavior analysis. - [ ] 1. 앱 분석을 통해 사용자 행동을 이해하는 데 가장 중요하다고 생각하는 메트릭은 무엇인가요, 그리고 왜 그렇게 생각하시나요? - [ ] 해당 메트릭을 기반으로 어떤 중요한 결정을 내린 경험이 있나요? - [ ] 2. 사용자 행동 분석을 통해 얻은 인사이트가 앱의 UI/UX 디자인에 어떤 영향을 미쳤나요? - [ ] 구체적인 예를 들어 사용자 경험을 개선한 사례를 설명해 주시겠어요? - [ ] 3. 특정 사용자 행동이 예상과 다를 때, 이를 어떻게 파악하고 대응하셨나요? - [ ] 이러한 상황을 해결하기 위해 적용한 분석 방법이나 전략은 무엇이었나요? - [ ] 4. 사용자 유지율(retention rate)을 분석할 때 어떤 요인들을 주로 고려하시나요? - [ ] 낮은 유지율 문제를 해결하기 위해 시도한 전략이나 개선책은 무엇이었나요? - [ ] 5. 세션 길이(session length)나 사용 빈도 등의 메트릭을 통해 어떤 유용한 인사이트를 얻었나요? - [ ] 이러한 메트릭이 앱 개선에 구체적으로 어떻게 도움이 되었나요? - [ ] 6. 사용자들이 앱 내에서 특정 기능을 사용하지 않는 경우, 그 원인을 분석하고 해결하기 위해 어떤 접근 방식을 취하셨나요? - [ ] 그 과정에서 어떤 도구나 기법을 사용하셨나요? - [ ] 7. 앱 분석 데이터를 기반으로 A/B 테스트를 설계하고 실행한 경험이 있나요? 그 과정에서 어떤 중요한 발견을 하셨나요? - [ ] A/B 테스트 결과가 앱의 기능이나 디자인에 어떤 변화를 가져왔나요? ### **Market Trends**: Understanding iOS app market trends. - [ ] 1. 현재 iOS 앱 시장에서 두드러지는 주요 트렌드는 무엇이라고 생각하시나요? - [ ] 이러한 트렌드가 iOS 애플리케이션 개발에 어떤 영향을 미치고 있다고 보시나요? - [ ] 1. 최근 몇 년간의 iOS 앱 시장 변화 중 가장 주목할만한 변화는 무엇이었다고 생각하시나요? - [ ] 이 변화가 개발자로서 여러분의 접근 방식이나 전략에 어떤 영향을 미쳤나요? - [ ] 2. 사용자 경험(UX) 및 인터페이스(UI) 디자인에서의 최신 iOS 앱 트렌드는 무엇이라고 생각하시나요? - [ ] 이러한 트렌드를 귀하의 앱 개발에 어떻게 반영하고 계신가요? - [ ] 4. 모바일 게임 시장에서 iOS 앱이 가지는 위치와 트렌드는 어떻게 변화하고 있다고 보시나요? - [ ] 이러한 변화가 게임 개발 전략에 어떤 영향을 미치고 있나요? - [ ] 5. AR(증강 현실) 또는 VR(가상 현실) 기술과 관련된 iOS 앱 시장의 동향은 어떻게 보시나요? - [ ] AR 또는 VR을 활용한 앱 개발에 있어서 고려해야 할 주요 요소는 무엇이라고 생각하시나요? - [ ] 6. 최근에 주목받고 있는 iOS 앱의 보안 트렌드는 무엇이라고 보시나요? - [ ] 이러한 트렌드에 부응하기 위해 어떤 보안 조치나 방법을 적용하고 계신가요? - [ ] 7. iOS 앱 시장에서의 인공지능(AI) 및 머신러닝(ML)의 활용은 어떤 방향으로 발전하고 있다고 보시나요? - [ ] AI나 ML을 앱 개발에 통합하는 과정에서 중요하게 생각하는 점은 무엇인가요? - [ ] 8. 현재의 경제 상황이 iOS 앱 시장에 어떤 영향을 미치고 있다고 생각하시나요? - [ ] 경제적 변화에 따라 여러분의 앱 개발 또는 마케팅 전략에 어떤 조정을 하고 계신가요? - [ ] 9. 사회적, 환경적 지속가능성과 관련된 iOS 앱 시장의 트렌드는 어떻게 변화하고 있나요? - [ ] 이러한 트렌드에 부응하기 위해 앱 개발에서 어떤 고려를 하고 계신가요? ### **Privacy and Regulation Compliance**: Adhering to privacy laws. - TBA ## Soft Skills and Methodologies ### **Agile Principles**: Understanding of Agile development methodologies. - [ ] 1. 애자일 개발 방법론을 적용하며 가장 큰 도전이 무엇이었나요, 그리고 이를 어떻게 극복하셨나요? - [ ] 특히 iOS 개발 프로젝트에서 애자일 방법론 적용 시 겪은 어려움과 해결책에 대해 말씀해 주시겠어요? - [ ] 2. 애자일 개발 방법론을 통해 프로젝트의 효율성을 어떻게 향상시키셨나요? - [ ] 구체적인 예를 들어, 어떤 애자일 기법이나 도구가 프로젝트에 긍정적인 영향을 미쳤는지 설명해 주시겠어요? - [ ] 3. 스크럼(Scrum)이나 칸반(Kanban)과 같은 애자일 프레임워크 중 어떤 것을 선호하시나요, 그리고 그 이유는 무엇인가요? - [ ] 해당 프레임워크를 통해 프로젝트 관리나 팀 협업에 어떤 개선을 경험하셨나요? - [ ] 4. 애자일 방법론에서 지속적인 피드백과 반복적인 개발이 중요한 이유는 무엇이라고 생각하시나요? - [ ] 이러한 접근 방식이 프로젝트의 성공에 어떤 실질적인 기여를 했나요? - [ ] 5. 애자일 방법론을 채택한 프로젝트에서의 요구사항 변경 관리는 어떻게 다루어지나요? - [ ] 요구사항이 변경될 때 이를 효과적으로 관리하는 전략이나 방법에 대해 말씀해 주시겠어요? - [ ] 6. 애자일 개발에서 사용자 스토리(User Story)를 작성하고 우선순위를 정하는 과정은 어떻게 진행하시나요? - [ ] 사용자 스토리를 통해 실제 개발 과정에서 어떤 이점을 얻었나요? - [ ] 7. 애자일 방법론을 도입한 후 팀원들 간의 커뮤니케이션과 협업이 어떻게 변화했나요? - [ ] 이러한 변화가 프로젝트 결과에 어떤 영향을 미쳤나요? ### **Team Collaboration and Communication**: Effective teamwork skills. - [ ] 1. 효과적인 팀 협업과 의사소통을 위해 가장 중요하다고 생각하는 요소는 무엇인가요, 그리고 이를 실현하기 위해 어떤 노력을 하셨나요? - [ ] 구체적인 예를 들어, 팀원 간의 의사소통을 개선하기 위한 전략이나 방법에 대해 설명해 주시겠어요? - [ ] 2. 다양한 배경과 전문성을 가진 팀원들과 협업할 때 겪는 주요 도전 과제는 무엇이었나요, 그리고 이를 어떻게 극복하셨나요? - [ ] 이러한 다양성이 프로젝트에 긍정적인 영향을 미친 사례가 있다면 말씀해 주시겠어요? - [ ] 3. 프로젝트 중 발생하는 의견 충돌을 어떻게 해결하셨나요? - [ ] 의견 충돌을 해결하는 과정에서 어떤 중재 또는 협상 기술을 사용하셨나요? - [ ] 4. 팀 프로젝트에서 각 팀원의 역할과 책임을 어떻게 분배하고 관리하셨나요? - [ ] 역할 분배가 프로젝트의 성공에 어떤 긍정적인 영향을 미쳤는지 구체적인 예를 들어 설명해 주시겠어요? - [ ] 5. 원격 협업 환경에서 팀원들과 효과적으로 소통하고 협업하기 위해 사용한 도구나 기술은 무엇인가요? - [ ] 이러한 도구나 기술이 원격 협업의 어려움을 어떻게 해결했나요? - [ ] 6. 프로젝트의 목표와 기대치를 팀원 모두와 공유하고 이해시키는 과정은 어떻게 진행하셨나요? - [ ] 프로젝트 목표에 대한 공유가 팀의 성과에 어떤 긍정적인 영향을 미쳤나요? - [ ] 7. 팀 내에서 서로의 성과를 인정하고 격려하는 문화를 어떻게 조성하셨나요? - [ ] 이러한 문화가 팀원들의 동기 부여에 어떤 영향을 미쳤나요? # Nice-to-Have Skills for iOS Developers ## Advanced Frameworks and Technologies - TBA ### **Graphics and Animation**: Core Animation, Metal. - TBA ### **iOS Widgets and App Clips**: Latest iOS feature development. - TBA ## Advanced Architectural Patterns ### **VIP**: View-Interactor-Presenter. - [ ] 1. VIP (View-Interactor-Presenter) 아키텍처를 사용하여 개발한 프로젝트에서, MVC나 MVVM과 비교했을 때 어떤 주요 이점을 경험하셨나요? - [ ] 특히 사용자 인터페이스와 비즈니스 로직의 분리 측면에서 어떤 차이를 느끼셨나요? - [ ] 2. VIP 아키텍처를 적용할 때 가장 큰 도전 과제는 무엇이었나요, 그리고 이를 어떻게 극복하셨나요? - [ ] 특히, iOS 개발 환경에서 VIP 아키텍처를 적용하는 데 있어 겪은 구체적인 문제와 해결 방법에 대해 설명해 주시겠어요? - [ ] 3. VIP 아키텍처에서 각 구성 요소(View, Interactor, Presenter)의 책임과 역할을 어떻게 정의하셨나요? - [ ] 이러한 역할 분담이 애플리케이션의 유지보수와 확장성에 어떤 영향을 미쳤나요? - [ ] 4. VIP 아키텍처를 사용하여 테스트 가능한 코드를 작성하는 데 있어 어떤 전략을 사용하셨나요? - [ ] 특히, Presenter와 Interactor의 단위 테스트에 있어 주목해야 할 점은 무엇이었나요? - [ ] 5. VIP 아키텍처를 도입한 후, 프로젝트 팀 내에서의 학습 곡선이나 적응 과정은 어떠했나요? - [ ] 팀원들이 이 아키텍처에 익숙해지기 위해 어떤 교육이나 자료를 활용하셨나요? - [ ] 6. VIP 아키텍처에서 데이터 흐름과 이벤트 처리는 어떻게 관리하셨나요? - [ ] 이러한 데이터 흐름과 이벤트 처리 방식이 애플리케이션의 반응성과 사용자 경험에 어떤 영향을 미쳤나요? - [ ] 7. VIP 아키텍처를 사용하면서 경험한 어떤 실수나 오해가 있었나요, 그리고 이를 통해 어떤 교훈을 얻었나요? - [ ] 이러한 경험이 향후 프로젝트에서 VIP 아키텍처를 적용하는 방식에 어떤 변화를 가져왔나요? ### **MVI**: Model-View-Intent. - [ ] 1. MVI (Model-View-Intent) 아키텍처를 채택한 이유는 무엇이었나요, 그리고 이 아키텍처가 iOS 애플리케이션 개발에 어떤 특별한 이점을 제공한다고 생각하시나요? - [ ] 특히, 기존의 MVC, MVP, MVVM 등의 패턴과 비교했을 때 MVI의 독특한 장점은 무엇이라고 보시나요? - [ ] 2. MVI 아키텍처에서의 'Intent' 개념을 어떻게 정의하고 구현하셨나요, 그리고 이것이 사용자 인터랙션 처리에 어떤 영향을 미쳤나요? - [ ] Intent의 구현이 사용자 경험과 앱의 반응성에 어떤 구체적인 변화를 가져왔나요? - [ ] 3. MVI 아키텍처를 사용하여 어플리케이션의 상태 관리를 어떻게 다루셨나요? - [ ] 상태 관리의 복잡성을 어떻게 관리하고, 어떤 도구나 라이브러리를 사용하셨나요? - [ ] 4. MVI 아키텍처를 적용한 iOS 애플리케이션에서 테스트 전략은 어떻게 수립하셨나요? - [ ] 모델, 뷰, 인텐트 각각에 대한 테스트는 어떻게 진행하셨나요? - [ ] 5. MVI 아키텍처를 적용하는 과정에서 겪은 주요 도전 과제는 무엇이었나요, 그리고 이를 어떻게 극복하셨나요? - [ ] 특히, 팀원들이 이 아키텍처에 적응하는 데 있어서 어떤 지원이나 교육이 필요했나요? - [ ] 6. MVI 아키텍처에서 데이터 흐름을 어떻게 관리하셨나요, 그리고 이것이 앱의 성능에 어떤 영향을 미쳤나요? - [ ] 데이터 흐름의 관리가 앱의 유지보수와 확장성에 어떤 영향을 미쳤나요? - [ ] 7. MVI 아키텍처를 적용한 후, 사용자 인터페이스의 반응성과 유지보수성에 어떤 변화가 있었나요? - [ ] 이러한 변화가 전체적인 사용자 경험에 어떤 긍정적 또는 부정적인 영향을 미쳤나요? ### **Clean Architecture**: Layer separation, dependency rule. - [ ] 1. iOS 앱을 개발할 때 Clean Architecture의 각 레이어(Entities, Use Cases, Interface Adapters, Frameworks & Drivers)가 갖는 역할과 책임은 무엇이라고 생각하시나요? - [ ] 각 레이어에서 중요하게 생각하는 설계 원칙은 무엇인가요? - [ ] 각 레이어 간의 의존성 관리는 어떻게 이루어지나요? - [ ] 2. Clean Architecture에서의 의존성 규칙을 iOS 앱 개발에 적용할 때 발생할 수 있는 어려움은 무엇이라고 보시나요? - [ ] 이러한 어려움을 해결하기 위한 방법은 무엇이라고 생각하시나요? - [ ] 3. 실제 iOS 프로젝트에서 Clean Architecture를 도입한 경험이 있다면, 가장 큰 이점과 도전 과제는 무엇이었나요? - [ ] 도전 과제를 어떻게 극복했나요? - [ ] 4. Clean Architecture를 적용했을 때, iOS 애플리케이션의 테스트 용이성에 어떤 변화가 있었나요? - [ ] 테스트 전략에서 어떤 점을 중점적으로 고려했나요? - [ ] 5. Interface Adapter 레이어에서의 Presenter와 Controller의 역할 분담은 어떻게 이루어지나요? - [ ] 이 두 구성 요소 간의 상호작용은 어떻게 설계하시나요? - [ ] 6. iOS 개발에서 Clean Architecture를 사용할 때, Swift의 어떤 언어적 특징이나 프레임워크 기능이 특히 유용하다고 생각하시나요? - [ ] 그 이유는 무엇인가요? - [ ] 7. Clean Architecture를 사용하여 iOS 앱을 개발하는 과정에서 성능 최적화를 어떻게 고려하시나요? - [ ] 특히 어떤 레이어에서 성능 관련 이슈에 주의를 기울이나요? - [ ] 8. Dependency Injection을 Clean Architecture 내에서 어떻게 구현하시나요? - [ ] 이를 통해 얻을 수 있는 이점은 무엇인가요? - [ ] Dependency Injection을 구현할 때 고려해야 할 주요 사항은 무엇인가요? - [ ] 9. Clean Architecture 적용 시, iOS 앱의 확장성과 유지보수성에 어떤 영향을 미치나요? - [ ] 특히 어떤 레이어가 이러한 측면에서 중요한 역할을 하나요? - [ ] 10. MVC, MVP, MVVM 등 다른 아키텍처 패턴과 Clean Architecture를 비교했을 때, iOS 개발에 있어서 Clean Architecture의 독특한 장점은 무엇이라고 생각하시나요? - [ ] 이러한 장점이 실제 앱 개발 과정에 어떻게 반영되었나요? ### **Coordinator Pattern**: Navigation management. - [ ] 1. Coordinator 패턴을 사용하여 iOS 앱 내의 네비게이션 관리를 설계할 때, 어떤 방식으로 ViewController 간의 의존성을 줄이시겠습니까? - [ ] 이러한 설계가 가져오는 테스트 용이성에 대해 어떻게 생각하시나요? - [ ] 테스트를 위한 모의 객체(Mock objects)를 사용할 때 Coordinator 패턴이 어떤 이점을 제공하나요? - [ ] 2. Coordinator 패턴을 사용하면서 발생할 수 있는 순환 참조 문제를 해결하기 위한 전략은 무엇입니까? - [ ] 순환 참조를 방지하기 위해 어떤 Swift 언어 기능을 주로 사용하시나요? - [ ] 순환 참조가 발생했을 때 이를 탐지하고 해결하는 구체적인 방법은 무엇입니까? - [ ] 3. Coordinator 패턴을 도입함으로써, 기존 MVC, MVVM, 혹은 다른 디자인 패턴과의 통합을 어떻게 관리하시겠습니까? - [ ] 특히 MVVM 패턴과 결합할 때 Coordinator 패턴의 역할과 책임이 어떻게 변화하나요? - [ ] 4. 대규모 프로젝트에서 여러 Coordinator들이 상호작용할 때, 이들 간의 통신과 관리를 어떻게 조절하시겠습니까? - [ ] Coordinator 간의 통신을 위해 사용하는 기법이나 패턴이 있으신가요? - [ ] 5. Coordinator 패턴을 사용할 때, 사용자 인터페이스의 동적 변경(예: 사용자 권한에 따라 화면 요소 변경)을 어떻게 처리하시겠습니까? - [ ] 이 과정에서 Coordinator의 역할과 ViewController의 역할은 어떻게 구분하시나요? - [ ] 6. Coordinator 패턴이 가져오는 메모리 관리 측면에서의 고려사항은 무엇입니까? - [ ] 메모리 누수를 방지하기 위해 어떤 Swift 특징을 활용하시나요? - [ ] 7. 실제 프로젝트에서 Coordinator 패턴을 구현할 때, 어떤 고려사항이 가장 중요하다고 생각하시나요? - [ ] 프로젝트의 규모나 복잡성이 증가함에 따라 Coordinator 패턴의 관리 방법에 어떤 변화를 주시겠습니까? ## Advanced UI/UX Design ### **Interactive Animations**: Creating more engaging and interactive UI elements. - TBA ### **Advanced Prototyping Tools**: Mastery of tools like Sketch, Adobe XD, or Figma for high-fidelity UI/UX design. - TBA ## Advanced Networking ### **GraphQL**: Understanding and using GraphQL for more efficient data fetching. - TBA ### **Socket Programming**: For real-time communication applications. - TBA ## Advanced Data Management ### **Big Data and Analytics**: Handling and analyzing large data sets for insights. - TBA ### **Advanced Database Management**: Using databases like Realm or Firebase for more complex data handling. - TBA ## Specialized Frameworks and APIs ### **AVFoundation**: Advanced audiovisual media handling. - TBA ### **Augmented Reality**: ARKit, RealityKit. - TBA ## Advanced and Emerging Technologies ### **Machine Learning**: Basics of CoreML. - TBA ### **Cloud Integration**: Basics of cloud services like AWS, Azure, or Google Cloud. - TBA ### **Voice and Chat Interfaces**: Basics of voice assistants and chatbots integration. - TBA ### **Blockchain and Cryptocurrency**: Basics of integrating blockchain technologies and understanding cryptocurrency transactions within apps. - TBA ### **Virtual Reality (VR)**: Understanding the basics of VR integration and its application in iOS development. - TBA ## Security and Privacy ### **App Security**: Encryption, authentication, secure coding. - TBA ### **Data Privacy**: User consent, data handling regulations. - TBA