1. MVC, MVVM 차이
Q: MVC와 MVVM의 차이점은 무엇인가요?
A:
- MVC: Model-View-Controller로, View와 Model이 Controller를 통해 간접적으로 연결됩니다. 그러나 iOS의 UIKit 구조상 Controller가 비대해지는 경향이 있습니다.
- MVVM: Model-View-ViewModel로, View와 ViewModel이 Data Binding을 통해 연결됩니다. 비즈니스 로직이 ViewModel에 분리되어 테스트 용이성과 유지보수성이 높아집니다.
2. ARC(Automatic Reference Counting)
Q: ARC는 어떻게 동작하나요?
A:
ARC는 객체의 참조 카운트를 기반으로 메모리를 관리합니다. 참조 카운트가 0이 되면 해당 객체의 메모리가 해제됩니다. 강한 참조(Strong Reference)가 순환 구조를 만들 경우 메모리 누수가 발생할 수 있어 weak 또는 unowned 키워드로 해결합니다.
3. Strong, Weak, Unowned 차이
Q: Strong, Weak, Unowned의 차이는?
A:
- Strong: 참조 카운트를 증가시키며, 기본 참조 방식.
- Weak: 참조 카운트를 증가시키지 않으며, 객체가 해제되면 자동으로 nil이 됩니다. Optional로 선언해야 합니다.
- Unowned: 참조 카운트를 증가시키지 않으며, 객체가 해제되면 접근 시 크래시가 발생합니다. nil이 될 수 없는 참조에 사용합니다.
4. 동기(Synchronous)와 비동기(Asynchronous)
Q: 동기와 비동기의 차이는?
A:
- 동기: 작업이 순차적으로 실행되며, 이전 작업이 끝나야 다음 작업이 시작됩니다.
- 비동기: 작업이 독립적으로 실행되며, 이전 작업의 완료 여부와 상관없이 다음 작업이 시작될 수 있습니다.
5. GCD와 OperationQueue 차이
Q: GCD와 OperationQueue의 차이는?
A:
- GCD: 경량의 API로, 간단한 비동기 처리와 큐 관리에 적합합니다.
- OperationQueue: GCD를 기반으로 구현되었으며, 의존성 설정, 취소, 우선순위 관리 등 고급 기능을 제공합니다.
6. Delegate와 Notification 차이
Q: Delegate와 Notification의 차이점은?
A:
- Delegate: 1:1 통신 방식, 특정 이벤트를 한 객체에 전달할 때 사용.
- Notification: 1:N 통신 방식, 여러 객체에 이벤트를 브로드캐스트할 때 사용.
7. URLSession과 Alamofire 차이
Q: URLSession과 Alamofire의 차이는?
A:
- URLSession: 네트워크 통신을 위한 Apple 기본 API, 직접 설정과 데이터 파싱을 구현해야 합니다.
- Alamofire: URLSession을 래핑한 라이브러리로, 요청/응답 처리와 JSON 파싱, 에러 핸들링을 쉽게 구현할 수 있습니다.
8. Diffable Data Source
Q: Diffable Data Source의 장점은?
A:
데이터 변경 시 전체 리로드 없이 변경된 셀만 업데이트하며, 스냅샷 기반으로 안전하고 간결한 데이터 업데이트가 가능합니다.
9. CoreData와 UserDefaults 차이
Q: CoreData와 UserDefaults 차이는?
A:
- CoreData: 대규모, 구조화된 데이터를 저장하고 관계형 데이터 모델을 지원합니다.
- UserDefaults: 소규모, 단순 키-값 형태의 데이터를 저장할 때 사용합니다.
10. 옵셔널(Optionals)
Q: Swift에서 옵셔널이란?
A:
값이 있을 수도 있고 없을 수도 있는 변수를 표현하는 타입입니다. 안전한 nil 처리와 런타임 크래시 방지를 위해 사용합니다. if let, guard let을 통한 안전한 바인딩을 권장합니다.