내가 아는 컴퓨터 랭귀지는 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];
간단하게 클래스 선언 메서드 구현 메서드 호출 등을 알아 봣다.
아직 생소 하지만 이제 슬슬 눈에 들어오는듯 하다.