Objective-C 면접에서 가장 많이 나오는 질문 30가지와 답변 (2026년 기준)

Objective-C 개발자 면접을 준비한다는 것은 면접관이 구문이나 메모리 모델 외에 어떤 질문을 할지 예상하는 것을 의미합니다. Objective-C 면접은 일관된 질문들을 통해 논리적 사고의 깊이, 설계 판단력, 그리고 실무 이해도를 평가합니다.
이러한 질문들은 신입 엔지니어부터 중간 경력 엔지니어, 그리고 시니어 엔지니어까지 모두에게 업계 트렌드와 실제 업무 경험을 반영하는 다양한 진로를 제시합니다. 고용주들은 실무 경험을 바탕으로 팀 리더 및 관리자와 협력하여 Objective-C 기술을 실제 운영 환경에 적용하는 전문가들의 기술 전문성, 분석 능력, 그리고 문제 해결 능력을 높이 평가합니다. 이러한 관점은 다양한 경력 단계에 걸쳐 성장을 지원합니다. 자세히보기 ...
👉 무료 PDF 다운로드: Objective-C 면접 질문 및 답변
Objective-C 면접에서 가장 많이 나오는 질문과 답변
1) Objective-C란 무엇이며 왜 사용되는가?
Objective-C는 C 프로그래밍 언어의 엄격한 상위 집합입니다. 객체 지향 기능과 동적 런타임을 추가한 언어입니다. 1980년대 초에 개발되었으며 현재 주로 사용되는 언어입니다. macOS 그리고 iOS 앱 개발 이전 SwiftC 언어의 구문을 계승하지만, 객체에 대해 스몰토크 스타일의 메시징을 사용하므로 런타임에 메서드를 동적으로 호출할 수 있습니다.
Objective-C는 개발에 사용됩니다.ping Apple 플랫폼용 네이티브 앱 애플 프레임워크와 긴밀하게 통합되기 때문입니다. Foundation 또한 Cocoa/Cocoa Touch를 지원합니다. 이를 통해 개발자는 시스템 API와 풍부한 UI 구성 요소에 완벽하게 접근할 수 있는 애플리케이션을 구축할 수 있습니다.
예:
#import <Foundation/Foundation.h>
@interface Sample : NSObject
- (void)showMessage;
@end
@implementation Sample
- (void)showMessage {
NSLog(@"Hello from Objective-C!");
}
@end
int main() {
Sample *obj = [[Sample alloc] init];
[obj showMessage];
return 0;
}
2) Objective-C 프로그램의 기본 구조를 설명하십시오.
Objective-C 프로그램은 일반적으로 다음과 같은 요소로 구성됩니다.
- 전 처리기 명령 (예 :
#import) - 인터페이스 (
@interface) – 클래스와 해당 클래스의 공개 메서드/속성을 정의합니다. - 실시 (
@implementation) – 메서드 정의를 포함합니다 - 행동 양식 – 객체와 관련된 함수
- 변수 표현 및 진술 – 코드 로직
- 코멘트 코드 로직을 설명하기 위해
이 구조는 인터페이스와 구현을 명확하게 분리합니다.ping 코드를 모듈화하세요.
3) Objective-C에서 프로토콜이란 무엇이며, 어떤 유형이 존재합니까?
Objective-C에서, 프로토콜 다른 언어의 인터페이스와 유사합니다. 모든 클래스가 채택하고 구현할 수 있는 메서드 집합을 정의하여 메서드 시그니처(구현은 아님)의 다중 상속을 가능하게 합니다.
두 가지 유형이 있습니다.
- 공식 프로토콜 – 선언됨
@protocol; 정의할 수 있습니다 필수 optional 방법. - 비공식 프로토콜 – 일반적으로 카테고리로 구현됩니다.
NSObject설계상 선택 사항입니다.
사용 사례 : UIKit의 위임 패턴은 종종 프로토콜(예: UITableViewDelegate).
4) #import와 #include의 차이점은 무엇인가요?
#includeC 전처리기 지시문으로, 한 파일의 내용을 다른 파일에 삽입하는 기능을 하며, 이로 인해 다음과 같은 문제가 발생할 수 있습니다. 다중 포함 문제.#importObjective-C에서 사용하는 명령어로, 특정 파일이 특정 조건에만 포함되도록 합니다. 일단중복을 피하면서.
따라서, #import Objective-C 개발에서 더 안전하고 선호되는 방식입니다.
5) Objective-C에서 범주(category)는 어떤 용도로 사용되나요?
카테고리는 기존 클래스를 확장합니다. 서브클래싱 없이 메서드 추가하기 또는 원본 코드를 수정하는 것입니다. 이를 통해 메서드를 논리적으로 그룹으로 나누거나 프레임워크 클래스에 추가적인 동작을 추가할 수 있습니다. NSString.
사용 예: 유틸리티 메서드 추가 NSArray 서브클래싱 없이:
@interface NSArray (Utility) - (NSArray *)reversedArray; @end
6) @synthesize는 무슨 일을 하나요?
The @synthesize 이 지시문은 컴파일러에게 다음과 같이 지시합니다. getter 및 setter 메서드를 생성합니다. 다음과 같이 신고된 속성의 경우 @property이는 캡슐화를 강화하고 반복적인 코드 작성을 자동화합니다.
이후 Xcode 4.4, 자동합성 기본값으로 설정되어 있으므로, 일반적으로 직접 입력할 필요가 없습니다. @synthesize 명시 적으로.
7) Objective-C에서 메모리 관리에 대해 설명하십시오.
Objective-C는 사용합니다 자동 참조 계수(ARC) 메모리 관리를 위해 ARC는 컴파일러가 생성하는 retain/release 호출을 추가하여 객체가 필요한 시간 동안 유지되도록 합니다. 참조가 남아 있지 않으면 할당 해제됩니다..
주요 개념:
- 강력한 추천서 물체를 살아있게 유지하세요
- 약한 참조 객체를 유지하지 않음으로써 순환 참조를 방지합니다.
예:
@property (strong, nonatomic) NSString *name; @property (weak, nonatomic) id delegate;
8) NSArray와 NSMutableArray의 차이점은 무엇입니까?
- NSArray: 불변 배열 — 생성 후에는 내용이 변경될 수 없습니다.
- NSMutableArray: 변경 가능한 배열 — 요소를 추가, 제거 또는 교체할 수 있습니다.
예:
NSMutableArray *list = [NSMutableArray arrayWithObjects:@"A", @"B", nil]; [list addObject:@"C"]; // Allowed
9) Objective-C에서 데이터 캡슐화란 무엇입니까?
데이터 캡슐화는 데이터와 데이터를 처리하는 함수들을 하나의 패키지로 묶습니다. 단일 단위(클래스) 클래스 외부에서의 직접적인 접근을 제한하면서 모듈성, 데이터 보호 및 절대성을 강화합니다.trac기.
10) Objective-C에서 메서드 호출은 어떻게 작동하나요?
Objective-C는 사용합니다 메시지 전달 통사론:
[object methodName];
여기 object 호출하라는 메시지를 받습니다 methodName메서드를 찾을 수 없는 경우 런타임은 전달을 처리하거나 예외를 발생시킵니다. 이러한 유연성은 Objective-C의 동적 런타임이 제공하는 강력한 기능입니다.
11) Objective-C에서 강력 속성, 약함 속성, 할당 속성, 복사 속성의 차이점을 설명하십시오.
Objective-C 속성은 객체 참조에 대한 메모리 관리 방식을 정의하며, 올바른 속성을 선택하는 것은 애플리케이션 안정성에 매우 중요합니다. strong 속성은 객체의 참조 카운트를 증가시켜 해당 속성이 존재하는 한 객체가 메모리에 유지되도록 합니다. 이는 일반적으로 소유권 관계에 사용됩니다. weak 속성은 객체를 유지하지 않고 자동으로 참조를 설정합니다. nil 객체가 할당 해제될 때 이러한 동작이 발생하며, 특히 델리게이트 패턴에서 순환 참조를 방지하는 데 도움이 됩니다.
The assign `copy` 속성은 정수 및 부동 소수점과 같은 기본 데이터 유형에 사용됩니다. 객체를 유지하지 않으므로 ARC 환경에서 Objective-C 객체에 사용해서는 안 됩니다. `copy` 속성은 객체를 생성합니다. copy 할당된 객체의 특성, 특히 변경 가능한 객체의 경우에 매우 중요합니다. NSMutableString 의도치 않은 변경을 방지하기 위해.
| 속성 | 객체를 유지합니다 | 적용 사례 |
|---|---|---|
| 강한 | 가능 | 소유권 |
| 약한 | 아니 | 대표자들 |
| 할당 | 아니 | 프리미티브 |
| 복사 | 사본 | 불변의 안전성 |
12) 자동 참조 계수(ARC)는 내부적으로 어떻게 작동합니까?
자동 참조 카운팅(ARC)은 컴파일 타임에 메모리 관리 기능을 수행하는 시스템으로, retain, release, autorelease 호출을 자동으로 삽입합니다. 가비지 컬렉션과 달리 ARC는 런타임에 실행되지 않고, 컴파일러가 객체의 생명주기를 분석하여 메모리 관리 호출이 필요한 위치를 결정합니다. 이를 통해 개발자 개입 없이 효율적인 메모리 사용이 가능합니다.
ARC tracks는 객체에 대한 강력한 참조를 관리하고, 강력한 참조가 더 이상 남아 있지 않으면 객체를 할당 해제합니다. 약한 참조는 객체가 할당 해제될 때 자동으로 0으로 초기화되어 애플리케이션의 안전성을 향상시킵니다. ARC는 Core를 관리하지 않습니다. Foundation 객체를 자동으로 생성하므로 브리징 기술과 같은 기술을 사용합니다. __bridge __bridge_transfer 필요합니다.
예를 들어, 두 객체가 서로를 강하게 참조하는 경우 순환 참조가 발생할 수 있으며, 이는 약한 참조를 사용하여 해결해야 합니다.
13) Objective-C 런타임이란 무엇이며, 왜 중요한가요?
Objective-C 런타임은 Objective-C 프로그램에서 동적인 동작을 가능하게 하는 강력한 시스템입니다. 이를 통해 메서드를 컴파일 시간이 아닌 런타임에 해결할 수 있으므로 동적 메서드 디스패치, 메시지 전달 및 인트로스펙션과 같은 기능을 구현할 수 있습니다.
이 런타임 환경은 Objective-C가 메시지가 전송될 때만 호출할 메서드를 결정할 수 있도록 합니다. 해당 메서드가 존재하지 않는 경우, 런타임은 메시지를 다른 객체로 전달하는 등 여러 가지 처리 방법을 제공합니다. 이러한 특징 덕분에 Objective-C는 매우 유연하고 확장성이 뛰어납니다.
런타임 함수는 개발자가 클래스 계층 구조를 검사하고, 메서드를 동적으로 추가하고, 메서드 구현을 변경할 수 있도록 해주며, 이는 디버깅 및 분석 프레임워크에서 흔히 사용됩니다.
14) Objective-C에서 블록이란 무엇이며, 블록을 사용하면 어떤 이점이 있습니까?
Objective-C의 블록은 나중에 실행될 코드와 변수를 캡슐화하는 클로저입니다. 다른 프로그래밍 언어의 람다 표현식과 유사하며, 콜백, 비동기 실행 및 열거에 일반적으로 사용됩니다.
블록은 주변 스코프에서 변수를 캡처하며, 이러한 변수는 다음을 사용하여 수정할 수 있습니다. __block 키워드입니다. 코드 가독성을 높이고 많은 시나리오에서 델리게이트 패턴의 필요성을 줄여줍니다.
블록의 장점으로는 코드 지역성 향상, 가독성 개선, 비동기 프로그래밍의 용이성 등이 있습니다. 하지만 블록이 강력한 방식으로 리소스를 캡처할 경우, 개발자는 순환 참조(retain cycle)에 주의해야 합니다. self. 사용 __weak 블록 내부의 참조는 메모리 누수를 방지합니다.
15) Objective-C에서 nil과 NULL의 차이점은 무엇입니까?
Objective-C에서, nil null 객체 포인터를 나타냅니다. NULL `null`은 C 타입에 대한 널 포인터를 나타냅니다. 비록 종종 동일한 값(0)으로 평가되지만, 의미적으로는 다르므로 적절하게 사용해야 합니다.
nil Objective-C 객체에 사용되며 애플리케이션 충돌 없이 안전하게 메시지를 보낼 수 있도록 합니다. 메시지가 전송될 때 nil단순히 0을 반환합니다. nil반면, 역참조는 NULL C 언어에서 포인터를 사용하면 정의되지 않은 동작이 발생하고 종종 애플리케이션이 충돌합니다.
사용 nil Objective-C 객체를 다룰 때 코드의 안전성과 가독성을 향상시키는 반면, NULL `C` 구조체와 포인터에만 사용해야 합니다.
16) Objective-C에서 위임(delegation)의 개념을 예시와 함께 설명하시오.
위임(Delegation)은 Objective-C에서 한 객체가 다른 객체에 이벤트나 결정을 전달할 수 있도록 하는 디자인 패턴입니다. 이는 순환 참조를 방지하기 위해 프로토콜과 약한 참조를 사용하여 구현됩니다. 위임은 느슨한 결합과 재사용성을 촉진합니다.
위임하는 객체는 프로토콜을 정의하고, 위임받는 객체는 해당 프로토콜을 채택하고 구현합니다. 그런 다음 위임하는 객체는 특정 이벤트가 발생할 때 위임받는 객체의 메서드를 호출합니다.
예를 들어, 테이블 뷰는 행이 선택되면 델리게이트에 알립니다. 이러한 설계 덕분에 서브클래싱 없이도 동작을 사용자 정의할 수 있으며, 애플 프레임워크 전반에서 널리 사용됩니다.
17) Objective-C에서 카테고리와 확장 기능은 어떻게 다른가요?
카테고리와 확장 기능은 모두 개발자가 기존 클래스에 기능을 추가할 수 있도록 해주지만, 목적은 서로 다릅니다. 카테고리는 클래스에 공개 메서드를 추가하며, 주로 코드를 정리하거나 유틸리티 메서드를 추가하는 데 사용됩니다. 클래스 확장이라고도 하는 확장 기능은 일반적으로 구현 파일에 선언되며, 비공개 속성과 메서드를 추가할 수 있도록 합니다.
카테고리는 인스턴스 변수를 추가할 수 없지만, 확장 기능은 추가할 수 있습니다. 카테고리는 프레임워크 클래스를 개선하는 데 자주 사용되는 반면, 확장 기능은 캡슐화 및 내부 구현 세부 정보를 위해 사용됩니다.
차이점을 이해하면 더 나은 클래스 설계와 향상된 유지보수성을 확보할 수 있습니다.
18) Objective-C에서 KVC(Key-Value Coding)는 어떻게 작동합니까?
키-값 코딩(KVC)은 문자열 키를 사용하여 객체의 속성에 간접적으로 접근할 수 있도록 합니다. 이를 통해 getter 또는 setter 메서드를 명시적으로 호출하지 않고도 값을 동적으로 설정하고 검색할 수 있습니다.
KVC는 Cocoa 바인딩 및 직렬화 프레임워크에서 널리 사용됩니다. 잘 정의된 조회 패턴을 사용하여 키를 해결하며, 배열 및 세트 작업을 위한 컬렉션 연산자를 지원합니다.
예를 들어, valueForKey: 값을 동적으로 검색하는 반면 setValue:forKey: 값을 할당합니다. 키를 잘못 사용하면 런타임 예외가 발생할 수 있으므로 신중한 유효성 검사가 필요합니다.
19) KVO(Key-Value Observing)란 무엇이며, 알림과는 어떻게 다른가요?
키-값 관찰(KVO)은 객체가 다른 객체의 특정 속성 변화를 관찰할 수 있도록 합니다. KVO는 키-값 제어(KVC)와 밀접하게 연관되어 있으며 속성 값이 변경될 때 자동 알림을 제공합니다.
알림과 달리 KVO는 세분화되고 속성별로 제어되는 반면, 알림은 브로드캐스트 기반입니다. KVO는 충돌을 방지하기 위해 적절한 옵저버 제거가 필요하지만, 알림은 결합도가 더 느슨합니다.
KVO는 MVC 아키텍처에서 모델 변경 사항을 관찰하는 데 이상적이며, 알림은 시스템 전반적인 이벤트에 더 적합합니다.
20) 오늘날 Objective-C를 사용하는 것의 장점과 단점은 무엇입니까?
Objective-C는 동적 런타임 기능, 성숙한 개발 도구, 그리고 기존 Apple 프레임워크와의 긴밀한 통합을 제공합니다. 또한 유연한 메시지 처리를 지원하며, 규모가 크고 완성도 높은 코드베이스에서 여전히 널리 사용되고 있습니다.
하지만 Objective-C는 구문이 장황하고 학습 곡선이 가파르며, 대부분 다른 언어로 대체되었습니다. Swift 새로운 개발을 위해. Swift 안전성, 가독성 및 성능 최적화가 향상되었습니다.
| 아래 | 장점 | 단점 |
|---|---|---|
| 런타임 | 동적 | 복잡한 |
| 통사론 | 강한 | 말 수가 많은 |
| 생태계 | 성숙한 | 입양률 감소 |
21) Objective-C 클래스의 메모리 할당부터 할당 해제까지의 생명주기를 설명하십시오.
Objective-C 객체의 생명주기는 메모리 할당으로 시작하여 할당 해제로 끝납니다. 이 생명주기는 주로 ARC(Account-Reference Control) 또는 기존 시스템에서의 수동 참조 카운팅을 통해 관리됩니다. 프로세스는 다음과 같이 시작됩니다. alloc이 단계에서는 객체에 필요한 메모리를 할당하고 인스턴스 변수를 기본값으로 초기화합니다. 그 다음에는 다음이 이어집니다. init이는 초기 상태를 설정하여 객체를 사용할 수 있도록 준비하는 과정입니다.
일단 초기화되면, 객체는 하나 이상의 강력한 참조가 존재하는 한 계속 생존합니다. 생존 기간 동안 객체는 메시지를 수신하고, 위임에 참여하며, 다른 객체와 상호 작용할 수 있습니다. 모든 강력한 참조가 해제되면 ARC는 자동으로 해당 기능을 호출합니다. dealloc여기서는 관찰자 제거 또는 리소스 해제와 같은 정리 작업이 수행됩니다.
메모리 누수, 댕글링 포인터 및 부적절한 리소스 처리를 방지하려면 이러한 생명주기를 이해하는 것이 필수적입니다.
22) Objective-C에서 메시지 전달은 어떻게 작동합니까?
메시지 전달은 객체가 처리할 수 없는 메시지를 수신했을 때 사용되는 다단계 메커니즘입니다. Objective-C는 즉시 크래시를 발생시키는 대신, 메서드를 동적으로 해결할 수 있는 여러 기회를 제공합니다. 첫 번째 단계는 런타임 검사입니다. +resolveInstanceMethod: 해당 메서드를 동적으로 추가할 수 있는지 확인합니다. 해결되지 않으면 다음 단계로 진행합니다. -forwardingTargetForSelector: 메시지를 다른 객체로 리디렉션합니다.
그것이 실패하면 런타임이 호출됩니다. -methodSignatureForSelector: -forwardInvocation: 메시지를 수동으로 전달합니다. 이를 통해 프록시 객체, 데코레이터 및 동적 동작을 사용할 수 있습니다.
이 메커니즘은 Objective-C의 유연성을 잘 보여주며 NSProxy와 같은 프레임워크 및 모킹 라이브러리에서 흔히 사용됩니다.
23) 리텐션 사이클이란 무엇이며, 어떻게 방지할 수 있습니까?
순환 참조는 두 개 이상의 객체가 서로에 대해 강력한 참조를 유지하여 ARC가 해당 객체를 해제하지 못하게 할 때 발생합니다. 이로 인해 객체가 더 이상 필요하지 않더라도 메모리 누수가 발생합니다. 순환 참조는 부모-자식 객체, 델리게이트, 블록 캡처링 사이에서 흔히 발생합니다. 순환 참조는 부모-자식 객체, 델리게이트, 블록 캡처링 사이에서 발생합니다. self.
순환 참조를 방지하기 위해 개발자는 위임자(delegates)와 같은 소유권이 없는 관계에 대해 약한 참조(weak reference)를 사용합니다. 블록 내에서는, __weak or __unsafe_unretained 참조 self 강한 포착을 피하기 위해 사용됩니다.
Instruments를 사용하여 순환 참조를 식별하고 소유권 의미 체계를 신중하게 설계하는 것은 장기 실행 애플리케이션을 개발하는 Objective-C 개발자에게 매우 중요한 기술입니다.
24) Objective-C는 동시성과 멀티스레딩을 어떻게 처리합니까?
Objective-C는 여러 가지 동시성 처리 메커니즘을 제공하며, 그중 가장 널리 사용되는 것이 GCD(Grand Central Dispatch)입니다. GCD를 사용하면 개발자는 작업을 큐에 제출하여 순차적으로 또는 동시에 실행할 수 있습니다.tracts 스레드 관리, 성능 및 안전성 향상.
다른 동시성 도구는 다음과 같습니다. NSThread, NSOperation예산 및 NSOperationQueue. 동안 NSThread 저수준 제어 기능을 제공합니다. NSOperationQueue 종속성 관리, 취소 및 우선순위 처리를 제공합니다.
일반적으로 성능이 중요한 코드에는 GCD가 선호되는 반면, NSOperationQueue 세밀한 제어가 필요한 복잡한 워크플로우에 적합합니다.
25) 메소드 스위즐링이란 무엇이며, 언제 사용해야 합니까?
메서드 스위즐링은 개발자가 두 메서드의 구현을 서로 교환할 수 있도록 하는 런타임 기술입니다. 이는 Objective-C 런타임 API를 사용하여 구현되며, 서브클래싱이나 원본 소스 코드 수정 없이 동작을 변경할 수 있게 해줍니다.
스위즐링은 분석, 로깅, 디버깅 및 테스트 프레임워크에서 흔히 사용됩니다. 그러나 스위즐링은 예상치 못한 동작을 유발하고, 디버깅을 어렵게 하며, 기본 구현이 변경될 경우 기능이 제대로 작동하지 않게 할 수 있으므로 주의해서 사용해야 합니다.
실제 운영 환경에서 메서드 스위즐링은 코드 안정성을 유지하기 위해 신중하게 문서화하고 명확하게 정의된 사용 사례로 제한해야 합니다.
26) Objective-C에서 얕은 복사와 깊은 복사의 차이점을 설명하세요.
얕은 복사는 컨테이너 객체만 복제하고 그 안에 포함된 객체는 복제하지 않습니다. 원본 컨테이너와 복사된 컨테이너는 모두 동일한 하위 객체를 참조합니다. 반면, 깊은 복사는 컨테이너와 그 안에 중첩된 모든 객체를 복제하여 독립적인 복사본을 생성합니다.
Objective-C 컬렉션 클래스는 일반적으로 기본적으로 얕은 복사를 수행합니다. 깊은 복사를 위해서는 명시적인 구현이 필요하며, 이는 종종 다음과 같은 방법을 사용합니다. NSCopying 또는 수동 반복.
| 복사 유형 | 컨테이너 복사됨 | 복사된 요소 |
|---|---|---|
| 얕은 | 가능 | 아니 |
| 깊은 안마 | 가능 | 가능 |
의도치 않은 부작용을 피하려면 가변 데이터 구조를 다룰 때 이러한 차이점을 이해하는 것이 필수적입니다.
27) Objective-C는 어떻게 자기 성찰을 지원합니까?
Objective-C의 인트로스펙션(Introspection)은 객체가 런타임에 자신의 구조와 동작을 검사할 수 있도록 합니다. 여기에는 클래스 멤버십, 메서드 사용 가능 여부, 프로토콜 준수 여부 확인 등이 포함됩니다. 예를 들어 다음과 같은 메서드들이 있습니다. isKindOfClass:, respondsToSelector:예산 및 conformsToProtocol: 일반적으로 사용됩니다.
내부 검사를 통해 방어적 프로그래밍과 동적 동작 적응이 가능해집니다. 예를 들어, 객체는 다른 객체가 해당 메서드를 호출하기 전에 해당 메서드가 구현되어 있는지 확인할 수 있어 런타임 안전성을 향상시킬 수 있습니다.
이 기능은 특히 느슨하게 결합된 시스템과 플러그인 기반 아키텍처에서 유용합니다.
28) Objective-C에서 `isEqual:`과 `==`의 차이점은 무엇입니까?
The == 연산자는 메모리 주소를 비교하여 두 참조가 동일한 객체를 가리키는지 여부를 판단합니다. isEqual: 이 메서드는 객체의 내용 또는 논리적 동일성을 비교합니다.
예를 들어, 텍스트 내용이 동일한 두 개의 서로 다른 문자열 객체는 다음과 같은 결과를 반환할 수 있습니다. NO 비교 대상을 사용하여 ==하지만, YES 비교 대상을 사용하여 isEqual:. 많은 Foundation 클래스 오버라이드 isEqual: 의미 있는 동등성 비교를 제공하기 위해.
논리적 오류를 방지하려면, 특히 집합이나 사전과 같은 컬렉션을 다룰 때 올바른 비교 방법을 선택하는 것이 필수적입니다.
29) Objective-C는 C 및 C 언어와 어떻게 통합됩니까? C++ 암호?
Objective-C는 C 언어와 완벽하게 호환되며 상호 운용이 가능합니다. C++ 목표를 통해-C++. 사용하여 .mm 파일에서 개발자는 Objective-C와 다른 언어를 혼합하여 사용할 수 있습니다. C++ 동일한 소스 파일 내의 코드.
이 통합을 통해 기존 C 및 C++ Objective-C의 객체 지향 기능을 활용하면서 라이브러리를 사용할 수 있습니다. 개발자는 메모리 및 호환성 문제를 방지하기 위해 이름 변환과 객체 수명 주기를 신중하게 관리해야 합니다.
목적-C++ 게임 엔진 및 멀티미디어 처리와 같이 성능이 중요한 응용 분야에서 일반적으로 사용됩니다.
30) Objective-C를 선택해야 하는 경우는 언제입니까? Swift 현대 발전에서?
Objective-C는 대규모 레거시 코드베이스를 유지 관리하거나, 오래된 프레임워크와 통합하거나, 기존 기술로는 쉽게 구현할 수 없는 고급 런타임 기능을 필요로 할 때 여전히 유효한 선택입니다. Swift동적인 메시징 시스템과 성숙한 툴링 덕분에 특정 저수준 또는 프레임워크 중심 개발 작업에 적합합니다.
하지만 신규 프로젝트의 경우, Swift 일반적으로 안전성, 가독성 및 성능 향상으로 인해 선호됩니다. 결정은 프로젝트 요구 사항, 팀의 전문성 및 장기적인 유지 관리 가능성을 고려하여 내려야 합니다.
Objective-C에 대한 깊이 있는 이해는 특히 Objective-C 애플리케이션을 광범위하게 사용하는 기업에서 여전히 가치가 있습니다.
🔍 Objective-C 면접에서 자주 나오는 질문과 실제 사례 및 전략적 답변
1) Objective-C와 다른 언어의 주요 차이점은 무엇인가요? Swift그렇다면 언제 Objective-C를 선택하시겠습니까?
후보자에게 기대하는 것: 면접관은 지원자가 언어 생태계를 얼마나 잘 이해하고 있는지, 그리고 정보에 기반한 아키텍처 설계 결정을 내릴 수 있는 능력을 평가하고자 합니다.
예시 답변: Objective-C는 강력한 런타임 기능을 갖춘 동적 메시지 기반 언어입니다. Swift 안전성, 성능 및 최신 구문을 강조합니다. 하지만 대규모 레거시 iOS 또는 다른 시스템을 유지 관리하거나 확장할 때는 여전히 Objective-C를 선택할 것입니다. macOS 코드베이스에서 재작성 Swift 불필요한 위험이나 비용을 초래할 것입니다.
2) Objective-C에서 ARC를 사용할 때 메모리 관리는 어떻게 작동하나요?
후보자에게 기대하는 것: 면접관은 메모리 관리의 기본 원리에 대한 당신의 이해도와 ARC가 이러한 원리를 어떻게 간소화하는지를 평가하고 있습니다.
예시 답변: ARC(Adaptive Reference Computing)에서는 컴파일러가 컴파일 시점에 자동으로 retain 및 release 호출을 삽입합니다. 하지만 개발자는 특히 델리게이트 패턴이나 블록 사용 시에 weak 참조나 assign 참조를 적절히 사용하여 강한 참조 순환을 피해야 합니다.
3) 강한 속성, 약한 속성, 그리고 할당 속성의 차이점을 설명해 주시겠습니까?
후보자에게 기대하는 것: 면접관은 지원자가 객체 소유권과 생명주기 관리에 대해 이해하고 있는지 확인하고 싶어합니다.
예시 답변: 강력한 속성은 유지 횟수를 늘리고 객체를 계속 살아있게 유지합니다. 약한 속성은 객체를 유지하지 않으며 객체가 할당 해제될 때 nil로 설정됩니다. 할당(Assign)은 일반적으로 기본 데이터 유형에 사용되며 객체 소유권을 관리하지 않습니다.
4) Objective-C 애플리케이션에서 발생한 까다로운 크래시를 디버깅했던 경험을 설명하십시오.
후보자에게 기대하는 것: 면접관은 지원자의 문제 해결 방식과 디버깅 능력을 평가하고 있습니다.
예시 답변: 이전 직장에서 저는 멀티스레드 환경에서 객체가 과도하게 해제되어 발생하는 반복적인 크래시를 디버깅했습니다. Instruments의 Zombies 기능을 사용하여 디버깅을 진행했습니다. trac할당 해제를 진행하면서 잘못된 속성 특성을 발견했고, 이를 수정하자 문제가 해결되었습니다.
5) Objective-C에서 카테고리와 서브클래스는 어떻게 다른가요?
후보자에게 기대하는 것: 면접관은 지원자의 코드 구성 및 확장성에 대한 이해도를 평가하고자 합니다.
예시 답변: 카테고리를 사용하면 서브클래싱 없이 기존 클래스에 메서드를 추가할 수 있으므로 기능 모듈화에 유용합니다. 서브클래스는 새로운 클래스 계층 구조를 만들고 동작을 재정의할 수 있지만, 결합도와 복잡성을 증가시킵니다.
6) Objective-C에서 블록이란 무엇이며, 일반적으로 어떻게 사용됩니까?
후보자에게 기대하는 것: 면접관은 지원자가 최신 Objective-C 패턴에 얼마나 익숙한지 확인하고 있습니다.
예시 답변: 블록은 코드와 캡처된 변수를 캡슐화하는 클로저입니다. 일반적으로 비동기 콜백, 완료 처리기 및 열거에 사용됩니다. 자기 자신을 참조하는 약한 참조를 사용하여 순환 참조를 방지하도록 주의해야 합니다.
7) Objective-C에서 스레딩과 동시성을 어떻게 처리하시겠습니까?
후보자에게 기대하는 것: 면접관은 지원자가 어떻게 성과와 대응력을 확보하는지 알고 싶어합니다.
예시 답변: 이전 직장에서는 백그라운드 작업과 UI 업데이트 관리를 위해 Grand Central Dispatch를 많이 사용했습니다. 데이터 일관성 유지를 위해 직렬 큐를, 성능에 중요한 작업을 위해 동시 큐를 활용했습니다.
8) 위임 방식과 그 장점을 설명하시오.
후보자에게 기대하는 것: 면접관은 iOS 개발에서 흔히 사용되는 디자인 패턴에 대한 지원자의 이해도를 평가하고 있습니다.
예시 답변: 델리게이트 패턴은 객체 간의 긴밀한 결합 없이 한 객체가 다른 객체에 이벤트나 데이터를 전달할 수 있도록 합니다. 이는 관심사 분리를 촉진하고 코드의 테스트 및 유지 관리를 용이하게 합니다.
9) 대규모의 기존 Objective-C 코드베이스를 어떻게 리팩토링할지 설명하십시오.
후보자에게 기대하는 것: 면접관은 지원자의 전략적 사고력과 기존 시스템 경험을 평가하고 있습니다.
예시 답변: 이전 직장에서는 리팩토링을 점진적으로 진행했습니다. 먼저 단위 테스트를 추가하고, 핵심 구성 요소를 분리하고, 코드 가독성을 개선하는 방식을 택했습니다. 대규모 코드 재작성을 지양하고, 시간을 두고 안전하게 기술 부채를 줄이는 데 집중했습니다.
10) Objective-C 프로젝트에서 코드 품질과 유지보수성을 어떻게 보장하나요?
후보자에게 기대하는 것: 면접관은 지원자의 엔지니어링 분야와 팀워크에 대한 통찰력을 얻고자 합니다.
예시 답변: 이전 직장에서는 일관된 코딩 표준, 철저한 코드 리뷰, 그리고 문서화를 강조했습니다. 또한 재사용 가능한 컴포넌트를 작성하고 정적 분석 도구를 사용하여 문제를 조기에 발견하도록 장려했습니다.
