Objc에서는 특별한 패턴을 제공한다. 물론 자바나 AS3에서는 이보다 좋은 패턴을 구사할 수 있기 때문에 이러한 개념은 자주 사용되지 않지만 물론 나도 카테고리 기법보다는 프로토콜 기법을 선호한다. 뭔가 코드를 땜빵하는 느낌이 강해서 별로 맘에 들지는 않지만 카테고리 기법을 사용하며 코드를 보다 유연하게 만들 수 있다.
카테고리기법은 간단히 말하자면 구현파일에 별도의 interface를 설정하여 메서드를 확장하는 것이다. 즉 기본적으로 구현해야만 하는 인터페이스 외에 추가로 구현하고자 하는 메서드를 선언하여 확장한다.
카테고리 선언 구조는 @interface 파일명(카테고리명)과 같은 형태로 선언한다.
#import "MyCategory.h"
///////////////// 구현 부분 : 실제 클래스 구현
@implementation MyCategory
@synthesize num01, num02;
@synthesize str01, str02;
//이것은 인터페이스에서 설정한 인스턴스 메서드
-(void)print
{
}
@end
////////////////// 카테고리 설정 : print에 관하여 특화된 카테고리
@interface MyCategory (printMethods)
-(void) printNum01;
-(void) printNum02;
-(void) printStr01;
-(void) printStr02;
-(void) printNums;
-(void) printStrs;
@end
//////////////// 카테고리 메서드 구현
@implementation MyCategory(printMethods)
-(void) printNum01
{
NSLog(@"%i", num01);
}
-(void) printNum02
{
NSLog(@"%i", num02);
}
-(void) printStr01
{
NSLog(@"%@", str01);
}
-(void) printStr02
{
NSLog(@"%@", str02);
}
-(void) printNums
{
NSLog(@"%i, %i", num01, num02);
}
-(void) printStrs
{
NSLog(@"%@, %@", str01, str02);
}
@end
위처럼 구현파일 안에 별도의 interface와 implementation 영역을 확장하여 메서드를 구현한다.