C, C++프로그래밍을 할 줄 알면서, Objective-C로 되어있는 아이폰 프로그램 코드를 보자니
생소한 코드 형태 때문에 헷갈리시는 분들이 읽으시면 도움이 되실것 같네요.
C언어와 Objective-C와의 가장 큰 차이점은 바로 '절차지향'언어이냐, '객체지향'언어이냐입니다.
C언어는 절차지향 언어로 프로그램 코드가 위에서 아래로 순차적으로 실행되고,
Objective-C는 C언어 위에 올려져 있는 계층적인 구조입니다. C언어를 확장하여 '객체'를 생성하고 다룰 수 있는 언어를 새로 만들어 낸 것입니다. 따라서, Objective-C언어는 객체지향언어의 특징을 갖습니다.
객체의 개념은 알고 있다고 가정하고,
기존의 언어(C, C++)와의 차이점을 중심으로 많이 다른 부분을 중심으로 설명하도록 하겠습니다.
제가 정리해본것은 7가지정도가 있습니다.
1)
일단, C언어의 printf("Hello World\n"); 라는 코드는 Objective-C언어에서 NSLog(@"Hello world"); 라는 코드와 동일합니다. @는 Objective-C언어의 문자열상수라는 것을 뜻합니다. 따라서 @를 붙이지 않으면 에러가 나게 됩니다.
2)
클래스로부터 나온 것을 인스턴트, 이 인스턴스가 수행하는 내용을 '메서드'라고 하는데,
메서드를 호출하는 것을 Objective-C에서는 수신자에게 메시지를 보낸다고 표현합니다.
호출하는 방식은 다음과 같습니다.
[receiver message];
수신자 메시지
3)
클래스 선언 방식은 좀 차이가 납니다.
우선 선언부분과 구현부분으로 나뉩니다.
선언 부분은 다음과 같습니다.
@interface ClassName : NSObject
{
//Class Variable
}
//Class Method
구현 부분은 다음과 같습니다.
@implementation ClassName
//Method implement
@end
4)
선언 부분과 구현 부분에서, 변수선언, 메소드 선언, 메소드 구현하는 부분을 각각 살펴보자면
변수 선언은 C언어나 C++에서의 선언방식과 동일합니다. 예를들어 int a; 같은거죠.
메소드 선언방식은 약간 다른데요, void add(int a); 라는 메서드 선언은 -(void) add : (int) a;와 동일합니다.
메소드 구현하는 부분은 위의 선언 부분에 { }만 넣어서 안에 구현 코드를 넣어 주는것은 동일합니다.
5)
위의 2)번에서 수신자에게 메시지를 보내는 방식으로 메서드를 호출할 수 있다고 하였는데, C++언어에서와 동일하게 점 연산자(.)를 사용해서 프로퍼티에 접근할 수 도 있습니다. 이는 Objective-C 2.0부터 지원되게 된 것이라고 합니다.
6)
메서드에 여러 인수를 넘겨줄때에도 조금 달라서 설명드립니다.
void add(int a, int b); 라는 코드는 Objective-C에서는 -(void) add : (int) a : (int) b;로 됩니다. 마찬가지로 3개,4개 넘길때도 ' : '로 구분만 해주면 됩니다.
7)
self, super라는 키워드가 적용됩니다. self라는 키워드는 매서드 내에서 사용하면 자기 자신을 가리킵니다.
즉, AAA클래스의 인스턴스의 add()라는 메소드가 있다면 그 안에 [self aaa]; 라고 작성하게 되면 AAA클래스의 매소드인 aaa가 호출됩니다.
비슷하게, super라는 키워드는 부모클래스를 가리킵니다. 동일한 맥락에서 이해하시면 됩니다.
이정도 차이점만 인지하고 있다면, iPhone프로그래밍을 하실 준비가 어느정도는 되었다고 생각됩니다.
나머지 다른 차이점이나 특성들은 그때그때 습득하면 되겠습니다~