데브허브 | DEVHUB | iOS Interview Questions and Answers (with Sample Code)iOS Interview Questions and Answers (with Sample Code)
- 이 과정은 10가지 인기 있는 iOS 개발자 면접 질문에 대한 심층적인 분석과 단계별 해결책을 제공하며, 실제 모의 면접 형식으로 진행됩니다. 📚
- SwiftUI와 Combine 관련 질문은 새로운 주제이므로 별도의 영상으로 다룰 예정이며, 이 영상에서는 기본적이고 핵심적인 질문에 집중합니다. 💡
- 뷰 컨트롤러 생명주기는 10년 이상 출제된 고전적인 iOS 면접 질문으로, 각 메서드 호출을 출력하는 샘플 앱으로 설명됩니다. 📱
- 생명주기 이벤트는
init, loadView, viewDidLoad, viewWill/DidAppear, viewWill/DidLayoutSubviews, viewWill/DidDisappear, deinit 순으로 호출됩니다. 🔄
viewWill/DidAppear 및 viewWill/DidDisappear와 같은 화면 표시/숨김 이벤트는 여러 번 호출될 수 있으며, 이는 흔한 오해입니다. ⚠️
deinit이 호출되지 않으면 메모리 누수가 발생했음을 의미하므로, 메모리 프로파일러를 사용해야 합니다. 👻
loadView는 뷰 컨트롤러의 기본 뷰를 UITableView와 같은 사용자 정의 뷰로 재정의할 때 사용됩니다. 🛠️
struct는 값 기반(복사)이고 class는 참조 기반(공유 인스턴스)이라는 것이 Swift의 핵심적인 차이점입니다. 🤝
- Swift는
Array나 Dictionary 같은 값 타입에 대해 copy-on-write 최적화를 사용하여, 내부적으로는 참조로 전달되고 수정 시에만 복사됩니다. 🚀
- 클래스는 은행 계좌(공유 상태), 구조체는 은행 명세서(독립적인 복사본)에 비유하여 이해할 수 있습니다. 🏦
- 구조체는 값 의미론 덕분에 스레드 간에 안전하게 전달될 수 있어, 경쟁 조건(race condition)을 줄이는 데 유리합니다. 🔒
- 뷰의
frame은 슈퍼뷰의 좌표계 내에서 뷰의 위치와 크기를 정의합니다. 🖼️
- 뷰의
bounds는 자신의 로컬 좌표계 내에서 뷰의 위치와 크기를 정의하며, 일반적으로 원점은 (0,0)입니다. 📏