Minseong Kang
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note No publishing access yet

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.

      Your account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

      Your team account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

      Explore these features while you wait
      Complete general settings
      Bookmark and like published notes
      Write a few more notes
      Complete general settings
      Write a few more notes
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note No publishing access yet

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.

    Your account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

    Your team account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

    Explore these features while you wait
    Complete general settings
    Bookmark and like published notes
    Write a few more notes
    Complete general settings
    Write a few more notes
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # 받은 질문 체크 --- ## 📚 목차 - [에릭](#에릭) - [솜](#솜) - [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

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password
    or
    Sign in via Facebook Sign in via X(Twitter) Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    By signing in, you agree to our terms of service.

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully