메서드를 구현 중 자주 사용하는 패턴이 싱글턴 패턴이 있다. 이러한 패턴을 사용하기 위해서 자주 사용하는 것이 정적변수와 클래스 메서드다. 이 둘을 잘 사용하면 캡슐화와 좋은 객체 지향 기법을 지켜 줄 수 있다.
#import "ClassA.h"
static int gCounter = 0;
@implementation ClassA
+(ClassA *) allocA
{
extern int gCounter;
++ gCounter;
return [ClassA alloc];
}
+(int) count
{
extern int gCounter;
return gCounter
}
@end
위의 코드는 클래스 메서드에서 정적메서드로 접근하여 값을 참조하고 있다. 우리가 흔히 instance와 getInstance를 사용한 싱글턴 패턴을 생각하면 될것 같다. 정적메서드는 내부 변수에 직접 접근하지 못하므로 클래스메서드 즉 getInstance로 접근하여 값을 참조한다는 것을 생각하면 된다. 여기서는 클래스 메서드에서 extern 지시어로 내부의 정적변수로 접근하고 있다.