Objective-C (프로토콜)

이한솔·2024년 8월 2일

Objective-C 문법 🍎

목록 보기
10/12

프로토콜

프로토콜은 클래스가 특정 메서드를 구현하도록 요구하거나, 클래스가 특정 기능을 제공해야 한다는 계약을 정의하는 방법이다. 프로토콜은 여러 클래스가 공통된 인터페이스를 갖도록 하여 코드의 유연성과 재사용성을 높일 수 있다.

프로토콜 정의 & 채택

프로토콜은 헤더 파일에서 @protocol 키워드를 사용하여 메서드의 이름, 파라미터, 반환 타입을 정의하며, 실제 구현은 클래스에서 제공해야한다.
클래스가 프로토콜을 채택하면, 그 프로토콜의 모든 요구 메서드를 구현해야한다.
선택적으로 메서드를 구현하도록 하려면 @optional 키워드를 사용하여 정의한다.

// 프로토콜 정의
// PersonProtocol.h
#import <Foundation/Foundation.h>

@protocol PersonProtocol <NSObject>

- (void)greet;
- (NSString *)getFullName;
@optional
- (NSString *)getFullName;

@end


// Person 클래스 선언부 
#import <Foundation/Foundation.h>
#import "PersonProtocol.h"

@interface Person : NSObject <PersonProtocol>

@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;

@end


// Person 클래스 구현부 
#import "Person.h"

@implementation Person

- (void)greet {
    NSLog(@"Hello!");
}

- (NSString *)getFullName {
    return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
}

@end

프로토콜 채택 확인

프로토콜을 채택한 객체가 특정 프로토콜의 메서드를 구현했는지 확인할 때는 respondsToSelector: 메서드를 사용한다.

Person *person = [[Person alloc] init];
if ([person respondsToSelector:@selector(getFullName)]) {
    NSLog(@"Full name: %@", [person getFullName]);
} else {
    NSLog(@"getFullName method is not implemented.");
}

0개의 댓글