산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

30가지 필수 Objective-C 면접 질문 및 답변(2026년 가이드)

Objective-C 역할을 준비한다는 것은 면접관이 구문 및 메모리 모델을 넘어서 무엇을 조사할지 예상하는 것을 의미합니다. Objective-C 인터뷰는 지속적으로 타겟 질문을 통해 추론 깊이, 디자인 판단, 실무적 이해를 보여줍니다.

이러한 질문은 업계 동향과 실제 전달을 반영하여 신입생, 중급 엔지니어 및 선배에게 길을 열어줍니다. 고용주는 실무 경험이 있는 전문가의 기술 전문 지식, 분석 및 문제 프레이밍을 중요하게 생각하며 팀 리더 및 관리자와 협력하여 생산 환경에 Objective-C 기술을 적용합니다. 이러한 관점은 다양한 경력 단계에서 성장을 지원합니다.

더 읽어보세요…

👉 무료 PDF 다운로드:Objective-C 인터뷰 질문 및 답변

1) Objective-C란 무엇이며 왜 사용되나요?

Objective-C는 C 프로그래밍 언어의 엄격한 상위 집합입니다. 객체 지향 기능과 동적 런타임을 추가합니다. 원래 1980년대 초반에 개발되었으며 Swift 이전에 macOS 및 iOS 앱 개발에 사용된 기본 언어입니다. C의 구문을 상속하지만 객체에 대해 Smalltalk 스타일 메시징을 사용하므로 런타임 시 동적으로 메서드를 호출할 수 있습니다.

Objective-C는 Apple 플랫폼의 기본 앱을 개발하는 데 사용됩니다. Foundation 및 Cocoa/Cocoa Touch와 같은 Apple 프레임워크와 긴밀하게 통합되기 때문입니다. 이를 통해 개발자는 시스템 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 프로그램은 일반적으로 다음으로 구성됩니다.

  1. 전처리기 명령 (예:#import )
  2. 인터페이스 (@interface ) – 클래스와 해당 클래스의 공용 메서드/속성을 정의합니다.
  3. 구현 (@implementation ) – 메소드 정의를 포함합니다
  4. 방법 – 객체와 관련된 기능
  5. 변수표현식 및 진술 – 코드 논리
  6. 댓글 코드 논리를 설명하기 위해

이 구조는 인터페이스와 구현을 명확하게 분리하여 코드를 모듈화하는 데 도움이 됩니다.

3) Objective-C의 프로토콜은 무엇이며 어떤 유형이 존재합니까?

Objective-C에서는 프로토콜 다른 언어의 인터페이스와 유사합니다. 이는 모든 클래스가 채택하고 구현할 수 있는 메서드 집합을 정의하여 메서드 시그니처(구현이 아님)의 다중 상속을 가능하게 합니다.

두 가지 유형이 있습니다:

사용 사례: UIKit의 위임 패턴은 종종 프로토콜(예:UITableViewDelegate)을 사용합니다. ).

4) #import와 #include의 차이점은 무엇인가요?

따라서 #import Objective-C 개발에서는 더 안전하고 선호됩니다.

5) Objective-C에서 카테고리는 어떻게 사용되나요?

카테고리는 하위 클래스화 없이 메소드를 추가하여 기존 클래스를 확장합니다. 또는 원본 코드를 수정합니다. 이를 통해 메소드를 논리적으로 그룹으로 분리하거나 NSString와 같은 프레임워크 클래스에 추가 동작을 추가할 수 있습니다. .

사용 예: NSArray에 유틸리티 메서드 추가 서브클래싱 없이:

@interface NSArray (Utility)
- (NSArray *)reversedArray;
@end

6) @synthesize는 무엇을 하나요?

@synthesize 지시문은 컴파일러에게 getter 및 setter 메소드를 생성하도록 지시합니다. @property로 선언된 속성의 경우 . 이는 캡슐화를 강화하고 상용구 코드를 자동화합니다.

Xcode 4.4부터 자동 합성 기본값입니다. @synthesize를 쓸 필요가 없는 경우가 많습니다. 명시적으로.

7) Objective-C의 메모리 관리를 설명합니다.

Objective-C는 자동 참조 계산(ARC)을 사용합니다. 메모리를 관리하는 것입니다. ARC는 필요한 만큼 객체가 활성 상태를 유지하고 참조가 남아 있지 않을 때 할당 해제되도록 보장하는 컴파일러 생성 유지/해제 호출을 추가합니다. .

주요 개념:

예:

@property (strong, nonatomic) NSString *name;
@property (weak, nonatomic) id delegate;

8) NSArray와 NSMutableArray의 차이점은 무엇입니까?

예:

NSMutableArray *list = [NSMutableArray arrayWithObjects:@"A", @"B", nil];
[list addObject:@"C"]; // Allowed

9) Objective-C의 데이터 캡슐화란 무엇인가요?

데이터 캡슐화는 데이터와 데이터에서 작동하는 기능을 단일 단위(클래스)로 결합합니다. 클래스 외부로부터의 직접 접근은 제한합니다. 이는 모듈성, 데이터 보호 및 추상화를 강화합니다.

10) Objective-C에서 메소드 호출은 어떻게 작동하나요?

Objective-C는 메시지 전달을 사용합니다. 구문:

[object methodName];

여기 object methodName을 호출하라는 메시지를 받았습니다. . 메서드가 해결되지 않으면 런타임은 전달을 처리하거나 예외를 발생시킵니다. 이러한 유연성은 Objective-C 동적 런타임의 강력한 기능입니다.

11) Objective-C의 강한 속성, 약한 속성, 할당 속성, 복사 속성의 차이점을 설명하세요.

Objective-C 속성은 객체 참조를 위해 메모리가 관리되는 방식을 정의하며 올바른 속성을 선택하는 것은 애플리케이션 안정성에 중요합니다. strong 속성은 객체의 참조 횟수를 늘려 속성이 존재하는 한 객체가 메모리에 남아 있도록 합니다. 일반적으로 소유권 관계에 사용됩니다. weak 속성은 객체를 유지하지 않으며 자동으로 참조를 nil로 설정합니다. 개체 할당이 취소되면 특히 대리자 패턴에서 유지 주기를 방지하는 데 도움이 됩니다.

assign 속성은 정수 및 부동 소수점과 같은 기본 데이터 유형에 사용됩니다. 객체를 유지하지 않으며 ARC의 Objective-C 객체에 사용하면 안 됩니다. 복사 속성은 copy을 생성합니다. 이는 NSMutableString와 같은 변경 가능한 객체에 특히 중요합니다. 의도하지 않은 수정을 방지하기 위해.

속성 객체 유지 사용 사례 강한예소유권약한아니요대리자할당아니요기본값복사본불변의 안전

12) 자동 참조 계산(ARC)은 내부적으로 어떻게 작동하나요?

ARC(Automatic Reference Counting)는 보유, 해제 및 자동 해제 호출을 자동으로 삽입하는 컴파일 타임 메모리 관리 시스템입니다. 가비지 수집과 달리 ARC는 런타임에 실행되지 않습니다. 대신 컴파일러는 객체 수명주기를 분석하고 메모리 관리 호출이 필요한 위치를 결정합니다. 이는 개발자 개입 없이 효율적인 메모리 사용을 보장합니다.

ARC는 객체에 대한 강력한 참조를 추적하고 강력한 참조가 남아 있지 않으면 할당을 취소합니다. 객체 할당이 취소되면 약한 참조가 자동으로 0으로 처리되어 애플리케이션 안전성이 향상됩니다. ARC는 Core Foundation 객체를 자동으로 관리하지 않으므로 __bridge와 같은 브리징 기술 및 __bridge_transfer 필수입니다.

예를 들어, 두 객체가 서로 강력하게 참조하는 경우에도 유지 주기가 발생할 수 있으며, 이는 약한 참조를 사용하여 해결해야 합니다.

13) Objective-C 런타임이란 무엇이며 왜 중요한가요?

Objective-C 런타임은 Objective-C 프로그램에서 동적 동작을 가능하게 하는 강력한 시스템입니다. 이를 통해 컴파일 시간이 아닌 런타임에 메서드를 확인할 수 있으므로 동적 메서드 디스패치, 메시지 전달 및 내부 검사와 같은 기능이 가능해집니다.

이 런타임을 사용하면 Objective-C는 메시지가 전송될 때만 호출할 메서드를 결정할 수 있습니다. 메서드가 없으면 런타임은 메시지를 다른 개체로 전달하는 등 메서드를 처리할 수 있는 여러 기회를 제공합니다. 이는 Objective-C를 매우 유연하고 확장 가능하게 만듭니다.

또한 런타임 기능을 통해 개발자는 클래스 계층 구조를 검사하고, 메서드를 동적으로 추가하고, 디버깅 및 분석 프레임워크에서 일반적으로 사용되는 메서드 구현을 혼합할 수 있습니다.

14) Objective-C의 블록은 무엇이며, 그 이점은 무엇입니까?

Objective-C의 블록은 나중에 실행하기 위해 코드와 변수를 캡슐화하는 클로저입니다. 이는 다른 프로그래밍 언어의 람다 표현식과 유사하며 일반적으로 콜백, 비동기 실행 및 열거에 사용됩니다.

블록은 __block를 사용하여 수정할 수 있는 주변 범위의 변수를 캡처합니다. 키워드. 코드 가독성을 단순화하고 다양한 시나리오에서 대리자 패턴의 필요성을 줄여줍니다.

블록의 이점에는 향상된 코드 지역성, 향상된 가독성 및 비동기 프로그래밍 용이성이 포함됩니다. 그러나 개발자는 블록이 self를 강력하게 캡처하는 경우 유지 주기에 주의해야 합니다. . __weak 사용 블록 내부의 참조는 메모리 누수를 방지합니다.

15) Objective-C에서 nil과 NULL의 차이점은 무엇인가요?

Objective-C에서는 nil NULL는 null 개체 포인터를 나타냅니다. C 유형에 대한 널 포인터를 나타냅니다. 동일한 값(0)으로 평가되는 경우가 많지만 의미상 다르기 때문에 적절하게 사용해야 합니다.

nil Objective-C 객체에 사용되며 애플리케이션 충돌 없이 메시지를 안전하게 보낼 수 있습니다. nil로 메시지가 전송될 때 , 단순히 0 또는 nil을 반환합니다. . 반대로 NULL를 역참조하면 C의 포인터는 정의되지 않은 동작을 초래하고 종종 응용 프로그램과 충돌합니다.

nil 사용 Objective-C 객체를 처리할 때 코드 안전성과 가독성이 향상되고 NULL C 구조와 포인터용으로 예약되어야 합니다.

16) 예를 들어 Objective-C의 위임을 설명하세요.

위임은 한 개체가 이벤트나 결정을 다른 개체에 전달할 수 있도록 하는 Objective-C의 디자인 패턴입니다. 유지 주기를 피하기 위해 프로토콜과 약한 참조를 사용하여 구현됩니다. 위임은 느슨한 결합과 재사용성을 촉진합니다.

위임 객체는 프로토콜을 정의하고, 위임 객체는 해당 프로토콜을 채택하고 구현합니다. 그런 다음 위임 개체는 특정 이벤트가 발생할 때 해당 대리자에 대한 메서드를 호출합니다.

예를 들어 테이블 뷰는 행이 선택되면 해당 대리인에게 알립니다. 이 디자인을 사용하면 하위 클래스화 없이 동작을 사용자 정의할 수 있으며 Apple 프레임워크 전반에 걸쳐 널리 사용됩니다.

17) Objective-C의 카테고리와 확장이란 무엇입니까?

카테고리와 확장을 통해 개발자는 기존 클래스에 기능을 추가할 수 있지만 용도는 서로 다릅니다. 카테고리는 클래스에 공용 메소드를 추가하며 코드를 구성하거나 유틸리티 메소드를 추가하는 데 자주 사용됩니다. 클래스 확장이라고도 하는 확장은 일반적으로 구현 파일에 선언되며 개인 속성 및 메서드 추가를 허용합니다.

카테고리는 인스턴스 변수를 추가할 수 없지만 확장은 가능합니다. 카테고리는 프레임워크 클래스를 강화하는 데 자주 사용되는 반면, 확장은 캡슐화 및 내부 구현 세부 사항에 사용됩니다.

차이점을 이해하면 더 나은 클래스 디자인과 향상된 유지 관리가 가능해집니다.

18) Objective-C에서 KVC(키-값 코딩)는 어떻게 작동하나요?

KVC(키-값 코딩)를 사용하면 문자열 키를 사용하여 객체의 속성에 간접적으로 액세스할 수 있습니다. getter 또는 setter 메소드를 명시적으로 호출하지 않고도 동적으로 값을 설정하고 검색할 수 있습니다.

KVC는 Cocoa 바인딩 및 직렬화 프레임워크에서 널리 사용됩니다. 잘 정의된 조회 패턴을 사용하여 키를 확인하고 배열 및 집합 작업을 위한 컬렉션 연산자를 지원합니다.

예를 들어 valueForKey: 동적으로 값을 검색하는 반면 setValue:forKey: 값을 할당합니다. 키를 잘못 사용하면 런타임 예외가 발생할 수 있으므로 신중한 검증이 필요합니다.

19) KVO(Key-Value Observing)란 무엇이며 알림과 어떻게 다른가요?

KVO(키-값 관찰)를 사용하면 객체가 다른 객체의 특정 속성에 대한 변경 사항을 관찰할 수 있습니다. KVC와 긴밀하게 결합되어 있으며 속성 값이 변경되면 자동 알림을 활성화합니다.

알림과 달리 KVO는 세부적이고 속성별로 다르지만 알림은 브로드캐스트 기반입니다. KVO는 충돌을 피하기 위해 적절한 관찰자 제거가 필요한 반면, 알림은 더 느슨하게 결합되어 있습니다.

KVO는 MVC 아키텍처의 모델 변경을 관찰하는 데 이상적이며 알림은 시스템 전체 이벤트에 더 적합합니다.

20) 현재 Objective-C를 사용하는 것의 장점과 단점은 무엇입니까?

Objective-C는 동적 런타임 기능, 성숙한 도구 및 레거시 Apple 프레임워크와의 긴밀한 통합을 제공합니다. 유연한 메시지 처리가 가능하며 대규모의 성숙한 코드베이스에서 여전히 널리 사용됩니다.

그러나 Objective-C는 장황한 구문과 더 가파른 학습 곡선을 갖고 있으며 새로운 개발을 위해 Swift로 대체되었습니다. Swift는 향상된 안전성, 가독성 및 성능 최적화를 제공합니다.

측면 장점 단점 런타임DynamicComplex구문강력하고장황한생태계성숙채택 거부

21) 할당에서 할당 해제까지 Objective-C 클래스 수명주기를 설명하세요.

Objective-C 객체의 수명주기는 메모리 할당으로 시작하여 할당 해제로 끝납니다. 이 수명주기는 주로 레거시 시스템의 ARC 또는 수동 참조 계산을 통해 관리됩니다. 프로세스는 alloc로 시작됩니다. , 객체에 메모리를 할당하고 해당 인스턴스 변수를 기본값으로 초기화합니다. 그 뒤에 init가 옵니다. , 초기 상태를 설정하여 사용할 개체를 준비합니다.

일단 초기화되면 객체는 하나 이상의 강력한 참조가 존재하는 한 활성 상태로 유지됩니다. 수명 동안 개체는 메시지를 받고, 위임에 참여하고, 다른 개체와 상호 작용할 수 있습니다. 모든 강력한 참조가 해제되면 ARC는 자동으로 dealloc를 호출합니다. , 관찰자 제거 또는 리소스 해제와 같은 정리 작업이 수행됩니다.

메모리 누수, 포인터 매달기, 부적절한 리소스 처리를 방지하려면 이 수명 주기를 이해하는 것이 필수적입니다.

22) Objective-C에서 메시지 전달은 어떻게 작동하나요?

메시지 전달은 객체가 처리할 수 없는 메시지를 수신할 때 사용되는 다단계 메커니즘입니다. 즉시 충돌하는 대신 Objective-C는 메서드를 동적으로 해결할 수 있는 여러 가지 기회를 제공합니다. 먼저 런타임은 +resolveInstanceMethod:를 확인합니다. 메소드를 동적으로 추가할 수 있는지 확인합니다. 해결되지 않으면 -forwardingTargetForSelector:로 진행됩니다. 메시지를 다른 개체로 리디렉션합니다.

실패하면 런타임은 -methodSignatureForSelector:를 호출합니다. 및 -forwardInvocation: 메시지를 수동으로 전달합니다. 이를 통해 프록시 개체, 데코레이터 및 동적 동작이 가능해집니다.

이 메커니즘은 Objective-C의 유연성을 강조하며 NSProxy 및 모킹 라이브러리와 같은 프레임워크에서 일반적으로 사용됩니다.

23) 유지 주기란 무엇이며 이를 방지하려면 어떻게 해야 합니까?

유지 주기는 두 개 이상의 객체가 서로에 대한 강력한 참조를 보유하여 ARC가 해당 객체를 할당 취소하지 못하게 할 때 발생합니다. 이로 인해 객체가 더 이상 필요하지 않더라도 메모리 누수가 발생합니다. 유지 주기는 일반적으로 상위 개체와 하위 개체, 대리자 및 self 캡처 블록 사이에서 발생합니다. .

유지 주기를 방지하기 위해 개발자는 위임과 같은 비소유권 관계에 대한 약한 참조를 사용합니다. 블록 단위:__weak 또는 __unsafe_unretained self에 대한 참조 강력한 캡처를 피하기 위해 사용됩니다.

Instruments를 사용하여 유지 주기를 식별하고 소유권 의미 체계를 신중하게 설계하는 것은 장기 실행 애플리케이션을 작업하는 Objective-C 개발자에게 중요한 기술입니다.

24) Objective-C는 동시성과 멀티스레딩을 어떻게 처리하나요?

Objective-C는 동시성을 위한 여러 메커니즘을 제공하며 GCD(Grand Central Dispatch)가 가장 널리 사용됩니다. GCD를 사용하면 개발자는 순차적으로 또는 동시에 실행되는 대기열에 작업을 제출할 수 있습니다. 스레드 관리를 추상화하여 성능과 안전성을 향상시킵니다.

다른 동시성 도구에는 NSThread이 포함됩니다. , NSOperationNSOperationQueue . NSThread 동안 낮은 수준의 제어 기능 제공(NSOperationQueue) 의존성 관리, 취소, 우선순위 처리 기능을 제공합니다.

GCD는 일반적으로 성능이 중요한 코드에 선호되는 반면, NSOperationQueue 세밀한 제어가 필요한 복잡한 작업흐름에 적합합니다.

25) 메소드 스위즐링이란 무엇이며 언제 사용해야 합니까?

메서드 스위즐링은 개발자가 두 메서드의 구현을 교환할 수 있게 해주는 런타임 기술입니다. 이는 Objective-C 런타임 API를 사용하여 달성되며 원본 소스 코드를 서브클래싱하거나 수정하지 않고도 동작을 수정할 수 있습니다.

Swizzling은 일반적으로 분석, 로깅, 디버깅 및 테스트 프레임워크에 사용됩니다. 그러나 예기치 않은 동작이 발생하고, 디버깅이 어려워지고, 기본 구현이 변경되면 기능이 중단될 수 있으므로 주의해서 사용해야 합니다.

프로덕션 코드에서는 코드 안정성을 유지하기 위해 메서드 전환을 주의 깊게 문서화하고 잘 정의된 사용 사례로 제한해야 합니다.

26) Objective-C의 얕은 복사와 깊은 복사의 차이점을 설명하세요.

얕은 복사본은 컨테이너 개체를 복제하지만 포함된 개체는 복제하지 않습니다. 원본 컨테이너와 복사된 컨테이너는 모두 동일한 기본 개체를 참조합니다. 반면, 전체 복사는 컨테이너와 모든 중첩 개체를 모두 복제하여 독립적인 복사본을 생성합니다.

Objective-C 컬렉션 클래스는 일반적으로 기본적으로 얕은 복사본을 수행합니다. 깊은 복사에는 종종 NSCopying를 사용하여 명시적인 구현이 필요합니다. 또는 수동으로 반복합니다.

복사 유형 컨테이너가 복사되었습니다 요소가 복사되었습니다 얕은예아니요깊은예예

의도하지 않은 부작용을 피하기 위해 변경 가능한 데이터 구조로 작업할 때 이러한 차이점을 이해하는 것이 필수적입니다.

27) Objective-C는 내부 검사를 어떻게 지원하나요?

Objective-C의 자체 검사를 통해 객체는 런타임에 자체 구조와 동작을 검사할 수 있습니다. 여기에는 클래스 멤버십, 메서드 가용성 및 프로토콜 적합성 확인이 포함됩니다. isKindOfClass:과 같은 메소드 , respondsToSelector:conformsToProtocol: 일반적으로 사용됩니다.

자기 성찰은 방어적인 프로그래밍과 동적 행동 적응을 가능하게 합니다. 예를 들어, 객체는 메소드를 호출하기 전에 다른 객체가 해당 메소드를 구현하는지 확인할 수 있어 런타임 안전성이 향상됩니다.

이 기능은 느슨하게 결합된 시스템과 플러그인 기반 아키텍처에서 특히 유용합니다.

28) Objective-C에서 isEqual:과 ==의 차이점은 무엇인가요?

== 연산자는 메모리 주소를 비교하여 두 참조가 동일한 객체를 가리키는지 여부를 결정합니다. isEqual: 방법은 객체의 내용이나 논리적 동등성을 비교합니다.

예를 들어 동일한 텍스트 내용을 가진 두 개의 서로 다른 문자열 개체가 NO를 반환할 수 있습니다. ==를 사용하여 비교할 때 , 그러나 YES isEqual:를 사용하여 비교할 때 . 많은 Foundation 클래스가 isEqual:를 재정의합니다. 의미 있는 동등 비교를 제공합니다.

특히 세트나 사전과 같은 컬렉션으로 작업할 때 논리적 오류를 방지하려면 올바른 비교 방법을 선택하는 것이 중요합니다.

29) Objective-C는 C 및 C++ 코드와 어떻게 통합되나요?

Objective-C는 C와 완벽하게 호환되며 Objective-C++를 통해 C++와 상호 운용할 수 있습니다. .mm을 사용하여 파일을 사용하는 경우 개발자는 동일한 소스 파일 내에서 Objective-C와 C++ 코드를 혼합할 수 있습니다.

이러한 통합을 통해 Objective-C의 객체 지향 기능을 활용하는 동시에 기존 C 및 C++ 라이브러리를 재사용할 수 있습니다. 개발자는 메모리 및 호환성 문제를 방지하기 위해 이름 변경 및 개체 수명 주기를 주의 깊게 관리해야 합니다.

Objective-C++는 게임 엔진, 멀티미디어 처리 등 성능이 중요한 애플리케이션에 일반적으로 사용됩니다.

30) 현대 개발에서 Swift 대신 Objective-C를 선택해야 하는 경우는 언제인가요?

Objective-C는 대규모 레거시 코드베이스를 유지 관리하거나, 이전 프레임워크와 통합하거나, Swift에서 쉽게 달성할 수 없는 고급 런타임 기능이 필요할 때 여전히 유효한 선택입니다. 동적 메시징 시스템과 성숙한 도구 덕분에 특정 하위 수준 또는 프레임워크 지향 개발 작업에 적합합니다.

그러나 새로운 프로젝트의 경우 향상된 안전성, 가독성 및 성능으로 인해 일반적으로 Swift가 선호됩니다. 결정은 프로젝트 요구 사항, 팀 전문성, 장기적인 유지 관리 가능성을 토대로 이루어져야 합니다.

Objective-C에 대한 깊은 이해는 특히 기존의 Objective-C 애플리케이션이 광범위하게 사용되는 기업의 경우 여전히 중요합니다.

🔍 실제 시나리오 및 전략적 대응이 포함된 주요 Objective-C 면접 질문

1) Objective-C와 Swift의 주요 차이점은 무엇이며, 여전히 Objective-C를 선택하시겠습니까?

후보로부터 기대되는 것: 면접관은 언어 생태계에 대한 이해도와 정보에 입각한 아키텍처 결정을 내리는 능력을 평가하고 싶어합니다.

답변 예시: Objective-C는 강력한 런타임 기능을 갖춘 동적 메시지 기반 언어인 반면 Swift는 안전성, 성능 및 최신 구문을 강조합니다. Swift로 다시 작성하면 불필요한 위험이나 비용이 발생하는 대규모 레거시 iOS 또는 macOS 코드베이스를 유지 관리하거나 확장할 때 여전히 Objective-C를 선택하겠습니다.

2) ARC의 Objective-C에서 메모리 관리는 어떻게 작동하나요?

후보로부터 기대되는 것: 면접관은 메모리 관리 기본 사항에 대한 이해도와 ARC가 이를 단순화하는 방법을 테스트합니다.

답변 예시: ARC에서 컴파일러는 컴파일 타임에 자동으로 유지 및 해제 호출을 삽입합니다. 개발자는 특히 위임 패턴 및 블록 사용에서 약한 참조를 사용하거나 적절하게 참조를 할당하여 강력한 참조 순환을 피해야 합니다.

3) 강한 속성, 약한 속성, 할당 속성의 차이점을 설명할 수 있나요?

후보로부터 기대되는 것: 면접관은 귀하가 객체 소유권과 수명주기 관리를 이해하고 있는지 확인하고 싶어합니다.

답변 예시: 강력한 속성은 보유 횟수를 늘리고 개체를 활성 상태로 유지합니다. 약한 속성은 개체를 유지하지 않으며 개체 할당이 취소되면 nil로 설정됩니다. Assign은 일반적으로 기본 유형에 사용되며 개체 소유권을 관리하지 않습니다.

4) Objective-C 애플리케이션에서 어려운 충돌을 디버깅한 시간을 설명해 주세요.

후보로부터 기대되는 것: 면접관은 귀하의 문제 해결 방식과 디버깅 기술을 평가합니다.

답변 예시: 이전 역할에서는 다중 스레드 환경에서 개체가 과도하게 릴리스되어 발생하는 반복적인 충돌을 디버깅했습니다. 할당 해제를 추적하기 위해 Zombies가 활성화된 Instruments를 사용하고 잘못된 속성 속성을 식별하여 수정 후 문제를 해결했습니다.

5) 카테고리는 Objective-C의 하위 클래스와 어떻게 다릅니까?

후보로부터 기대되는 것: 면접관은 코드 구성 및 확장성에 대한 이해도를 평가하고 싶어합니다.

답변 예시: 카테고리를 사용하면 서브클래싱 없이 기존 클래스에 메서드를 추가할 수 있어 기능을 모듈화하는 데 유용합니다. 서브클래스는 새로운 클래스 계층을 생성하고 동작을 재정의할 수 있지만 결합성과 복잡성을 증가시킵니다.

6) Objective-C의 블록은 무엇이며 일반적으로 어떻게 사용됩니까?

후보로부터 기대되는 것: 면접관은 귀하가 최신 Objective-C 패턴에 얼마나 친숙한지 확인하고 있습니다.

답변 예시: 블록은 코드와 캡처된 변수를 캡슐화하는 클로저입니다. 일반적으로 비동기 콜백, 완료 핸들러 및 열거에 사용됩니다. 자기 자신에 대한 약한 참조를 사용하여 유지 주기를 피하도록 주의해야 합니다.

7) Objective-C에서는 스레딩과 동시성을 어떻게 처리합니까?

후보로부터 기대되는 것: 면접관은 어떻게 성과와 대응력을 확보할 수 있는지 알고 싶어합니다.

답변 예시: 이전 직위에서는 Grand Central Dispatch에 크게 의존하여 백그라운드 작업과 UI 업데이트를 관리했습니다. 데이터 일관성을 위해 직렬 대기열을 사용하고 성능이 중요한 작업을 위해 동시 대기열을 사용했습니다.

8) 델리게이트 패턴과 그 장점을 설명하세요.

후보로부터 기대되는 것: 면접관은 iOS 개발의 일반적인 디자인 패턴에 대한 이해도를 테스트하고 있습니다.

답변 예시: 대리자 패턴을 사용하면 한 개체가 긴밀한 결합 없이 이벤트나 데이터를 다른 개체와 다시 전달할 수 있습니다. 이는 문제의 분리를 촉진하고 코드를 더 쉽게 테스트하고 유지 관리할 수 있도록 해줍니다.

9) 대규모 레거시 Objective-C 코드베이스를 리팩토링하는 방법을 설명하세요.

후보로부터 기대되는 것: 면접관은 귀하의 전략적 사고와 기존 시스템에 대한 경험을 평가합니다.

답변 예시: 마지막 역할에서는 단위 테스트를 먼저 추가하고, 중요한 구성 요소를 격리하고, 코드 가독성을 향상시켜 점진적인 리팩토링에 접근했습니다. 대규모 재작성을 피하고 시간이 지남에 따라 기술 부채를 안전하게 줄이는 데 집중했습니다.

10) Objective-C 프로젝트에서 코드 품질과 유지관리성을 어떻게 보장합니까?

후보로부터 기대되는 것: 면접관은 귀하의 엔지니어링 분야와 팀워크에 대한 통찰력을 원합니다.

답변 예시: 이전 직장에서는 일관된 코딩 표준, 철저한 코드 검토 및 문서화를 강조했습니다. 또한 재사용 가능한 구성요소를 작성하고 정적 분석 도구를 사용하여 문제를 조기에 파악하도록 권장했습니다.


C 언어

  1. C++ 프로그래밍:C++란 무엇입니까 | C++의 기본 개념 배우기
  2. C++ 의사결정문
  3. C 튜토리얼
  4. 배열과 포인터의 관계
  5. C의 비트 연산자:AND, OR, XOR, 시프트 및 보수
  6. C - 유형 주조
  7. malloc() 대 calloc():예제와 함께 설명된 주요 차이점
  8. C 전처리기와 매크로
  9. C++ 연산자 오버로딩
  10. C의 문자열:변수 선언 방법, 초기화, 인쇄, 예제