모바일 개발 · 중급
Swift에서 델리게이트(Delegate) 패턴은 어떤 목적으로 사용되며, 이를 구현하기 위한 핵심적인 요소(프로토콜, weak 키워드 등)들을 설명하고, 델리게이트 패턴이 NotificationCenter나 KVO에 비해 가지는 장점은 무엇인지 설명해주세요.
힌트 · 델리게이트는 객체 간의 일대일 통신을 위해 프로토콜을 사용하며, 특정 이벤트에 대한 책임을 위임하여 결합도를 낮춥니다. 명확한 메서드 정의와 타입 안정성을 제공합니다.
Delegate 패턴프로토콜weak 참조타입 안정성1:1 통신
모범답안
델리게이트 패턴은 Swift에서 객체 간의 일대일 통신을 위해 사용됩니다. 특정 객체가 해야 할 일을 다른 객체에게 위임하여 코드의 결합도를 낮추고 유연성을 높이는 것이 목적입니다.
구현 핵심 요소로는 먼저 프로토콜이 있습니다. 델리게이트 프로토콜을 정의하여 위임할 메서드를 명시하고, 위임을 받는 객체는 이 프로토콜을 채택하여 해당 메서드를 구현합니다. 또한, 순환 참조를 방지하기 위해 델리게이트는 weak 키워드를 사용하여 약한 참조로 선언합니다.
델리게이트 패턴은 NotificationCenter나 KVO에 비해 타입 안정성이 높고, 1:1 통신에 특화되어 있다는 장점이 있습니다. NotificationCenter는 1:N 통신에 적합하지만 타입 정보가 약하고, KVO는 속성 감시에 유용하지만 델리게이트처럼 명확한 메서드 정의를 제공하지 않습니다. 델리게이트는 특정 이벤트에 대한 책임을 명확하게 위임하고, 컴파일 시점에 오류를 검출할 수 있어 더욱 안전한 코드를 작성할 수 있도록 돕습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 iOS / Swift 면접 질문
- iOS 앱 개발 시 ARC(Automatic Reference Counting)가 어떻게 동작하는지 설명하고, 강한 참조 순환(Retain Cycle)이 발생하는 대표적인 상황과 이를 해결하는 방법에 대해 구체적인 코드 예시 없이 개념적으로 설명해주세요.
- Swift에서 구조체(Struct)와 클래스(Class)의 주요 차이점을 메모리 관리 및 데이터 전달 관점에서 설명하고, 각각 어떤 상황에서 사용하는 것이 적절한지 구체적인 사용 사례와 함께 비교하여 설명해주세요.
- iOS 앱에서 비동기 작업을 처리하기 위해 GCD(Grand Central Dispatch)를 사용하는 경우, `DispatchQueue.main.async`와 `DispatchQueue.global().async`의 차이점을 설명하고, 각각 어떤 용도로 사용되는지 예시를 들어 설명해주세요.
- Swift의 에러 처리(Error Handling) 방식에 대해 설명하고, `do-catch`, `try?`, `try!`의 각각의 용도와 차이점을 구체적인 상황과 연결하여 설명해주세요.
- Swift 클로저(Closure)의 특징에 대해 설명하고, 클로저에서 강한 참조 순환(Retain Cycle)이 발생할 수 있는 상황과 이를 방지하기 위한 캡처 리스트(Capture List)의 `weak` 및 `unowned` 사용법에 대해 설명해주세요.
- Swift에서 옵셔널 값에 접근할 때 옵셔널 체이닝(Optional Chaining)과 강제 언래핑(Forced Unwrapping)의 차이점을 설명하고, 각각 어떤 상황에서 사용하는 것이 안전하고 적절한지 예시를 들어 설명해주세요.