'오브젝티브 C'에 해당되는 글 1건

최초 작성일 : 2010/04/10 16:24 



Objective-c에서의 메서드는 크게 클래스 메서드와 인스턴스 메서드로 나눌 수 있다.


1. Class Method

클래스 메서드는 클래스 인스턴스가 아닌 클래스에서 바로 사용 할 수 있는 메서드로
선언시에 + 기호로 시작을 한다. java 언어의 static 메서드와 유사하다.

예)

+ (void) classMethod;

클래스에서 바로 사용을 할 수 이있기 때문에 함수를 호출하는 경우에도 인스턴스명을
사용하지 않고 클래스명을 사용한다.

예)
MyClass *myClass;
...
[MyClass classMethod];

만일 자기 자신의 인스턴스를 생성하는 클래스 메서드를 subclass에서 호출한 경우
리턴되는 인스턴스는 subclass의 인스턴스이다.

예)
MyClass *myClass = [MyClass classMethod];
MySubClass *mySubClass = [MySubClass classMethod]; //MyClass의 subclass

클래스 메서드는 인스턴스 변수에 직접 접근하여 참조할 수 없다.

@interface MyClass : NSObject {
    NSString *title;
}
+ (void)classMethod;
@end

이 경우 classMethod는 title 변수를 직접 참조할 수 없다.

클래스 메서드 내에서 self를 사용하는 경우 self는 클래스 메서드가 선언된
바로 그 클래스를 의미한다.

만일 MyClass라는 클래스에 구현된 클래스 메서드 myMethod가 아래와 같다면

+ (id)myClass {
    return [[[self alloc] init] autorelease];
}

이 메서드 내에서의 self는 MyClass 클래스이다.

만일  MyClass의 서브 클래스인 MySubClass의 인스턴스를 얻고자 한다면
아래와 같이 호출해야 한다.

[MySubClass myClass];

2. instance Method

인스턴스 메서드는 - 기호로 메서드를 선언한다.

인스턴스 메서드는 클래스의 인스턴스가 생성된 후 사용할 수 있는 메서드로
클래스의 인스턴스와 생명주기를 같이 하여 인스턴스가 메모리에서 해제되면
더이상 사용을 할 수없는 메서드이다.

메서드 호출 역시 클래스 이름이 아닌 인스턴스 이름을 통하여 하게 된다.

만일 MyClass 클래스에 다음과 같이 인스턴스 메서드가 선언되어있다면

- (void) myInstanceMethod;

이 메서드는 다음과 같은 절차를 거쳐 호출될 수 있다.

MyClass *myClass = [MyClass myClass];
[myClass myInstanceMethod];

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^