iOS 면접 질의응답
1. Swift와 Objective-C의 차이점은 무엇인가요?
Swift는 Objective-C에 비해 타입 안전성이 뛰어나며, 가독성이 높은 문법을 제공합니다. Swift는 메모리 관리를 자동화하는 ARC(Automatic Reference Counting)를 지원하고, 런타임 오류를 줄이는 안전한 프로그래밍 패턴을 채택하고 있습니다. 반면, Objective-C는 C언어를 기반으로 하여 C 라이브러리와의 호환성이 뛰어나지만, 코드가 복잡할 수 있습니다.
2. iOS 앱 개발에서 사용되는 주요 프레임워크는 무엇인가요?
iOS 개발에는 여러 프레임워크가 사용되며, 가장 중요한 것은 UIKit(사용자 인터페이스), Foundation(기본 데이터 관리 및 네트워킹), Core Data(지속적 데이터 저장 및 관리)입니다. 이 프레임워크들은 앱의 다양한 측면을 지원하여 개발 과정을 효율적으로 만듭니다.
3. MVC, MVVM, VIPER와 같은 아키텍처 패턴을 설명해주세요.
MVC (Model-View-Controller): 가장 기본적인 아키텍처 패턴으로, 애플리케이션을 모델, 뷰, 컨트롤러 세 부분으로 나누어 관리합니다. MVVM (Model-View-ViewModel): 뷰와 모델 사이의 의존성을 줄이기 위해 뷰모델을 사용합니다. 이는 데이터 바인딩을 통해 뷰의 코드를 간소화할 수 있게 해 줍니다. VIPER (View-Interactor-Presenter-Entity-Router): 각 부분이 하나의 책임만을 가지도록 설계된 아키텍처로, 큰 프로젝트에서 효율적인 유지보수를 가능하게 합니다.
4. Auto Layout을 사용하는 이유와 주요 기능에 대해 설명해주세요.
Auto Layout은 다양한 화면 크기와 방향에서 일관된 레이아웃을 유지할 수 있도록 도와줍니다. 이는 제약 조건을 기반으로 요소들이 화면 내에서 어떻게 배치되고 크기가 조정되는지를 정의하여, 동적으로 화면을 구성할 수 있게 합니다.
5. Core Data의 주요 개념과 사용법을 설명해주세요.
Core Data는 객체 그래프 관리와 영구 저장소로의 객체 데이터의 지속성을 관리하는 프레임워크입니다. 데이터 모델러를 통해 데이터 구조를 시각적으로 구성할 수 있으며, SQLite, XML, Binary 등 다양한 저장 형식을 지원합니다. 관계, 가져오기, 저장 과정의 최적화를 통해 효율적인 데이터 관리가 가능합니다.
6. 메모리 관리 방법에 대해 설명하고, ARC가 어떻게 작동하는지 설명해주세요.
iOS에서는 ARC를 사용하여 메모리 관리를 자동화합니다. ARC는 객체에 대한 참조 횟수를 추적하여, 참조 횟수가 0이 되면 해당 객체를 메모리에서 해제합니다. 개발자는 강한 참조(strong reference)와 약한 참조(weak reference)를 적절히 사용하여 순환 참조를 방지해야 하며, 이를 통해 메모리 누수를 예방할 수 있습니다.
7. App Store에 앱을 배포하는 과정을 단계별로 설명해주세요.
앱을 App Store에 배포하는 과정은 다음과 같습니다:
앱 개발 및 로컬 테스트: 개발자는 앱을 개발하고 로컬 환경에서 충분히 테스트합니다. 빌드 및 업로드: 앱을 Xcode를 통해 빌드하고, 모든 앱 정보와 함께 iTunes Connect (현재는 App Store Connect)에 업로드합니다. 리뷰 프로세스: 업로드된 앱은 Apple의 리뷰 프로세스를 거칩니다. 이 과정에서 앱의 적합성이 평가됩니다. 승인 및 릴리스 관리: 승인이 완료되면, 개발자는 앱의 릴리스를 관리할 수 있으며, 사용자는 App Store에서 앱을 다운로드할 수 있습니다.
8. 최신 iOS 업데이트에서 추가된 기능 중 하나를 선택하고, 그 기능이 앱 개발에 어떻게 활용될 수 있는지 설명해주세요.
iOS 15에서 추가된 SharePlay 기능은 멀티미디어 공유를 가능하게 하여 앱 개발자들이 새로운 형태의 상호 작용을 앱에 통합할 수 있도록 합니다. 개발자는 SharePlay API를 사용하여 사용자들이 비디오를 시청하거나 음악을 듣는 동안 서로 상호 작용할 수 있는 기능을 개발할 수 있습니다. 이를 통해 사용자 경험을 향상시키고 앱의 매력을 증가시킬 수 있습니다.
9. 비동기 프로그래밍과 GCD, OperationQueue의 사용 예를 설명해주세요.
비동기 프로그래밍은 UI가 응답을 멈추지 않게 하면서 백그라운드에서 데이터 로딩, 이미지 다운로드, 데이터 처리와 같은 작업을 수행합니다. GCD(Grand Central Dispatch)는 작업을 다양한 큐에 넣어 비동기적으로 실행할 수 있게 해 주며, 멀티코어 하드웨어의 잠재력을 최대한 활용할 수 있습니다. 예를 들어, 이미지를 다운로드하고 처리하는 작업을 백그라운드 스레드에서 실행한 다음, 메인 스레드에서 UI를 업데이트하는 것입니다. OperationQueue는 GCD보다 더 고수준의 API를 제공하며, 작업 간의 종속성을 설정하고 실행을 취소하거나 일시 중지할 수 있는 기능을 제공합니다.
10. “Copy on Write”를 설명해주세요.
Swift의 “Copy on Write” (CoW) 메커니즘은 특히 값 타입(Value Types)에서 메모리 사용을 최적화하는 데 유용합니다. Swift에서는 구조체(struct), 열거형(enum), 그리고 기본 데이터 타입들(int, string, array 등)을 값 타입으로 처리합니다. 값 타입은 데이터를 전달할 때 원본의 복사본을 만들어 전달합니다. 그러나 이 과정이 항상 즉각적으로 발생하는 것은 아니며, Copy on Write 메커니즘이 이를 최적화합니다.