본문 바로가기
2_ 바삭바삭 프로그래밍/Objective C

Objective-C 클래스 만들기

by 준환이형님_ 2011. 4. 14.

예전의 어색했던 기억을 더듬다보면 시간을 그때로 돌려서 다시 행동하고 싶은 생각을 하듯이..

지난 가을 겨울 캥거루때로 돌아가 뭘 좀 더 알고 다시 짜고 싶은 생각을 지금도 가끔씩은 한답니다.  부끄러운 이야기지만 당시 오브젝티브 씨에서 클래스와 딜리게이트 개념이 참 이해하기 어려웠어요.. 지금 다시하면 조금은 나을지 궁금하네요 ^^

출처 : sungjinl2e님(sungjinl2e.egloos.com)

Objective-C에는 @interface라는 키워드가 있다. C++에서의 Class와 같은 의미이다.

특이한건 모든 키워드마다 앞에 "@"가 붙는다. 그리고 마지막에 @end로 끝난다는 것이다.
아래의 예제는 간단한 클래스를 만든 예제이다.
 


// --------------------------------------   클래스 선언부. -----------------------------------------//

// Animal.h파일 생성  구현.

@interface Animal : NSObject {

    int age;

    NSString name;

}

+(void)eat;                 // +  static 함수라는 의미      - class method

-(void)move;              // -  일반 멤버 함수라는 의미     - instance method

-(id)init;                     // 생성자

                                // id타입은 모든 객체의 주소를 담을  있는 타입이다.

@end


// --------------------------------------   클래스 구현부. -----------------------------------------//

// Animal.m 파일 생성  구현.

@implementation Animal


// 초기화 함수를 구현.( 생성자 역할 )

-(id)init {

    if ( self = [super init] ) {

        age     = 1;

        name  = @"AAA";

    }

    return self;                      // self => c++에서의 this.

}


// eat함수 구현

+(void)eat {

    NSLog(@"eat");                // C에서의 prinft()함수.

}


// move함수 구현.

-(void)move {

    NSLog(@"move");

}

@end


// -----------------------------------------   main 함수. --------------------------------------------//

// 객체를 생성 하는 방법.        : [ Animal alloc ] 

// 메소드를 호출하는 방법.      : [ p eat ]

// 초기화 함수 만들기(생성자)  : Objective-C에서는 생성자라는것이 정해져 있지 않다.

//                                       일반적으로 init 많이 사용.                                                 

int main()

{

    Animal* p = [ [ Animal alloc ] init ];     // 객체의 생성과 초기화를 동시에 수행.

                                                        // Animal 객체를 생성하고,


                                                        // Animal init초기화 메소드를 호출.  

    [ p eat ];                                        // eat 메소드 호출.   

    [ p move ];                                     // move 메소드 호출

    [ p release ];                                  // C++에서의 delete.

    return 0;

}