모바일 개발 · 중급
Swift에서 옵셔널 값에 접근할 때 옵셔널 체이닝(Optional Chaining)과 강제 언래핑(Forced Unwrapping)의 차이점을 설명하고, 각각 어떤 상황에서 사용하는 것이 안전하고 적절한지 예시를 들어 설명해주세요.
힌트 · 옵셔널 체이닝은 `nil`일 경우 `nil`을 반환하여 안전하며, 강제 언래핑은 `nil`일 경우 런타임 에러를 발생시킵니다. 안전한 코드를 위해 옵셔널 체이닝을 선호합니다.
옵셔널 체이닝강제 언래핑안전성nil 반환런타임 에러
모범답안
Swift에서 옵셔널 값에 접근하는 방법으로 옵셔널 체이닝과 강제 언래핑이 있습니다. 둘의 가장 큰 차이점은 안전성입니다.
옵셔널 체이닝은 옵셔널 값이 nil일 경우, 뒤따르는 프로퍼티나 메서드를 실행하지 않고 그냥 nil을 반환합니다. 따라서 런타임 에러를 발생시키지 않아 안전합니다. 예를 들어, person?.address?.street처럼 사용하면 person이나 address가 nil일 경우에도 에러 없이 nil을 반환합니다.
반면, 강제 언래핑은 옵셔널 값이 nil이 아니라고 확신할 때 사용합니다. !를 사용하여 값을 강제로 추출하는데, 만약 값이 nil이라면 런타임 에러가 발생합니다. 예를 들어, myOptional!처럼 사용합니다.
일반적으로 옵셔널 체이닝을 사용하는 것이 더 안전합니다. 강제 언래핑은 정말로 값이 nil일 가능성이 없고, nil일 경우 프로그램이 예상치 못한 동작을 하는 것을 방지하기 위해 사용하는 것이 좋습니다. 즉, 디버깅 과정에서 특정 변수가 항상 값을 가져야 하는 경우에 일시적으로 사용하거나, 앱의 로직상 절대 nil이 될 수 없는 경우에만 신중하게 사용해야 합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 iOS / Swift 면접 질문
- Swift에서 델리게이트(Delegate) 패턴은 어떤 목적으로 사용되며, 이를 구현하기 위한 핵심적인 요소(프로토콜, weak 키워드 등)들을 설명하고, 델리게이트 패턴이 NotificationCenter나 KVO에 비해 가지는 장점은 무엇인지 설명해주세요.
- Swift의 에러 처리(Error Handling) 방식에 대해 설명하고, `do-catch`, `try?`, `try!`의 각각의 용도와 차이점을 구체적인 상황과 연결하여 설명해주세요.
- Swift 클로저(Closure)의 특징에 대해 설명하고, 클로저에서 강한 참조 순환(Retain Cycle)이 발생할 수 있는 상황과 이를 방지하기 위한 캡처 리스트(Capture List)의 `weak` 및 `unowned` 사용법에 대해 설명해주세요.
- Swift의 async/await 및 Actor를 활용하여 고도로 동시성 높은 네트워크 요청 시스템을 설계할 때, 스레드 안전성을 보장하고 리소스 사용을 최적화하며, 특히 상호 의존적인 요청 처리 및 취소 메커니즘을 어떻게 구현할 것인지 구체적으로 설명하시오.
- 대규모 iOS 애플리케이션에서 복잡한 뷰 계층과 데이터 모델 간의 메모리 누수를 진단하고 해결하기 위한 심층적인 전략을 설명하고, Instruments 도구 중 어떤 것을 주로 활용할 것인지 구체적인 시나리오와 함께 제시하시오.
- 복잡한 커스텀 UICollectionView 또는 UITableView에서 셀 스크롤 성능 저하가 발생했을 때, 이를 진단하고 최적화하기 위한 고급 기법들을 설명하시오. 특히 오프스크린 렌더링, 레이아웃 계산, 이미지 로딩 관점에서 접근하시오.