2010년 12월 16일 목요일

Objective-C class

내가 아는 컴퓨터 랭귀지는 Basic, fortran, cobol , C, C++, java, pascal,
여기서 Basic 아직도 기억이 나긴 하는 언어 이지만 이제 쓸일이 없다.
fortran cobol 언급할 필요도 없는 구시대에 언어 80년대 말 학원가에서 초딩들을 오래 붙잡으려고 가르칠때 나또한 어설프게 배웠다.
하여 지금은 전혀 구사 하지도 못할듯,
C, C++ 밥벌이 언어이므로 언제나 보고 잇다.
Java처음 등장 부터 맘에 안들어서 걍 멀리 했다. C++가 유사한 구문이 많다 정도만 알지 깊게 모른다.
pascal 볼랜드 C++빌더에서 VCL 컴퍼넌트를 이해하기 위해 읽기 정도만 가능한 언어
델파이 보다 C++빌더에 더 친했기 때문에 실제로 작성해본 코드는 거의 없다.
오히려 파스칼로 구현된 코드를 C++로 변경하는 작업을 해본듯.

이제 오브젝티브-C 도대체 머하는 놈인지 한번 끝까지 봐보고 판단해 보자
왜 이따이 언어를 도입해서 진입 장벽을 만드는지.

Addison wesley - Programming in Objective C 2.0을 보면서 나름대로 토를 달아보자..

#import

@interface Fraction: NSObject
{
int numerator;
int denominator;
}

-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;

@end

@implementation Fraction
-(void) print
{
NSLog(@"%i/%i", numerator, denominator);
}

-(void) setNumerator: (int) n
{
numerator = n;
}

-(void) setDenominator: (int) d
{
denominator = d;
}

@end

int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction;

myFraction = [Fraction alloc];
myFraction = [myFraction init];

[myFraction setNumerator: 1];
[myFraction setDenominator: 3];

NSLog (@"The value of myFraction is:");
[myFraction print];
[myFraction release];

[pool drain];
return 0;
}


위 코드를 하나 하나 분석해 봅시다.

@interface section
@implementation section
program section

3개의 section으로 구분 지어 진다.

@interface section

@interface NewClassName: ParentClassName
{
memberDeclarations;
}

methodDeclarations;
@end;

위 예제에서는 NSObject가 부모 클래스이고 Fraction이라는 클래스를 선언 하고
멤버 변수 numerator, denominator; 를 각각 int형으로 선언
메서드를 print , setNumerator, setDenominator 를 선언 한것이다.

-(void) print;

-가 의미 하는 것은 instance method이고
+는 class method를 의미 한다. class 메서드는 나중에 설명이 될듯 여기선 스킵
리턴형이 void 이다.

-(void) setNumerator: (int) n;
리턴형은 void이고 아규먼트 int형 n으로 선언 된것이다.
아규먼트가 있을 경우 : 를 붙여 준다.

- (void) setNumerator : (int) n;

method type, return type, method name, method take arguments, arguments type, argument name

@implementation section

@implementation NewClassName
methodDefinitions;
@end


머 대충 보면 함수 구현 부 보면 알수 있을듯 하여 스킵한다.

Program section

NSObject를 상속 받아서 alloc, init , release 등의 메서드를 호출 할수 있다.

Fraction *myFraction = [[Fraction alloc] init];
이렇게 사용할수 있다.

이는 지금 까지 많이 봣던
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
과 같은 스타일로 자주 나온다.

메서드 호출
[myFraction setNumerator: 1];
[myFraction print];

메모리 해제 등
[myFraction release];

간단하게 클래스 선언 메서드 구현 메서드 호출 등을 알아 봣다.
아직 생소 하지만 이제 슬슬 눈에 들어오는듯 하다.




댓글 없음: