'Objective C/ObjectC 패턴'에 해당되는 글 2건

  1. 2010.06.06 프로토콜 기법
  2. 2010.06.06 카테고리 기법
아마 이 프로토콜기법은 자주 사용하는 것 중에 하나일 것이다. 바로 우리가 자주 사용하는 인터페이스를 활용하는 기법이다. 즉 인터페이스에 내가 구현하고자 하는 메서드 들을 정의한 다음 여러 구현파일에서 임포트 하여 해당 메서드들을 특성에 맞도록 구현하는 것이다.
여기서는 반드시 구현해야만 하는 메서드와 그렇지 않은 것 크게 2가지 형태로 메서드 공유목록을 작성할 수 있다.

[ 형태 ]
@protocol 이름 : 반드시 구현해야할 메서드
메서드...
@optional : 구현해도 되고 안해도 되는 메서드들
메서드...
@required : 반드시 구현해야 하는 메서드 목록 
메서드...
@end

@protocol protocolTest

- (void) test01:(int) num;

- (void) test02:(NSString *) str;

@optional 

- (void) test03;

- (void) test04;

@required

- (void) test05;

- (void) test06;


@end


위의 코드는 3가지 목록을 사용하여 필수 구현메서드와 선택 구현 메서드를 정의하여 보았다. 이처럼 선언된 헤더파일을 임포트한 구현파일의 헤더에서는 인터페이스 선언 시에 <protocolTest>를 사용하여 프로토콜을 설정한다. 다중 설정도 가능하다.( <protocolTest, numMethods, ....> )


Posted by 버터백통
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 영역을 확장하여 메서드를 구현한다.
Posted by 버터백통