Objective-C++
by Eonil
Objective-C는 C 기반 언어이므로 C는 자연스럽게 섞어쓸 수 있습니다. C에 존재하는 기능은 아예 있지도 않을 정도니까요. (예: 정적 필드)
하지만 C++는 이와 비슷하게 C에서 갈라져 나온 언어로 Objective-C와는 다른 길을 걷어왔습니다. 이들은 기본적으로 호환이 되지 않습니다. 하지만 이들은 결국 C의 확장이므로, 포인터와 기본형식, 함수 호출이라는 최소의 공통분모가 있습니다. 기를 기반으로 애플은 이들을 섞어쓸 수 있도록 하는 옵션을 주었고, 실제로는 이들을 섞어서 사용할 수 있습니다. 여기에서 가장 기반이 되는 것은 포인터=개체라는 룰입니다. 하지만 제약이 있습니다.
- 별도의 처리가 필요하므로 컴파일러가 이를 인지할 수 있도록 소스파일 확장자를 .mm으로 주어야 합니다.
- 타입 시스템이 호환되지 않습니다. 그래서 클래스 정의와 상속은 완전히 분리되어 섞을 수 없습니다.
- C++ 키워드는 인스턴스 변수 식별자로 사용할 수 없습니다. 다른 컨텍스트에서는 허용됩니다.
- id라는 이름의 C++ 템플릿을 만들 수 없습니다. Objective-C의 프로토콜 정의와 문법이 겹치기 때문입니다.
- 예외 처리가 분리됩니다. C++예외는 C++코드에서만, Objective-C 예외는 Objective-C 코드에서만 캐치할 수 있습니다.
- Objective-C의 클래스 안에 C++클래스를 정의해도 전역 클래스로 간주됩니다.
더 자세한 내용은 레퍼런스 페이지에서 확인하실 수 있습니다:
http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCPlusPlus.html#//apple_ref/doc/uid/TP30001163-CH10-SW1