객체 지향 C언어
객체 지향 프로그래밍 언어라고 하면, 많은 사람들이 C++이나 Java, C# 언어를 떠올릴 것입니다. 언어에 약간의 지식이 있는 사람이라면 Smalltalk를 떠올릴지도 모릅니다. Objective-C 또한, Smalltalk와 같거나 그 이상의 객체 지향 프로그래밍 언어 입니다. 하지만 AT 호환 컴퓨터 및 Windows 시스템을 사용하고 있는 개발자는 이 언어를 접할 기회 조차 없었을 수도 있습니다..
그러나, 객체 지향 언어라면 단연 Objective-C라고 대답하는 개발자도 존재 할 것입니다. 그런 사람은 Mac OS의 개발자나, 스티브잡스의 팬일 것입니다. 현재 가장 Objective-C를 많이 사용하는 곳은 Apple사의 Mac OS X입니다.
소프트웨어 개발에서 Objective-C를 실제로 많이 사용하고 있는 곳은,대부분 Mac OS X 입니다.그런데 Mac OS X에서, 왜 이같은 낯설고 작은 언어를 사용하는가 하면, Mac OS X가 NeXT사의 NEXTSTEP의 개발 언어로 사용했었기 때문입니다. Mac OS X의 GUI는 NEXTSTEP API를 사용하고 있기 때문에, 개발 언어로는 대다수 부분을 Objective-C로 개발하고 있습니다.
그러나 두려워 필요가 없습니다. Objective-C는 C언어와 완전히 호환되는 언어이기 때문에, C언어 소스 코드를 그대로 컴파일 할 수 있습니다(ANSI C Superset). 그리고 C언어에 몇가지 기능을 추가하여 객체 지향을 구현 하였습니다. 다행히 스럽게도 Objective-C는 객체 지향 언어인 C++ 언어보다는 간단한 구조입니다.
C++언어는 다양한 언어를 접해본 필자의 경험에서 비추어 볼 때 가장 학습하기 어려운 언어입니다. Objective-C 언어의 기본적인 부분을 학습하기 위해서는, Objective-C의 전체적인 구조를 이해 해야 한다는 전제조건이 있어야 하기 때문에 객체 지향 초보자는 언어의 기본적인 부분을 이해하기 어렵습니다. 가능하다면 C++ 언어에 대한 지식과 객체 지향에 대한 근본적인 이해가 필요합니다.
Objective-C와 C++
Objective-C는 C언어를 기본 구조조 사용하며, Smalltalk 언어를 개념을 도입한 언어이고, C++ 언어와는 역사적이나 언어 사양 면에서도 전혀 다른 존재입니다. 현재 주요 객체 지향 언어들은 대부분 Java 언어를 기반으로 하는 것이 많아서, Smalltalk을 기본으로 하고 있는 Objective-C 코드를 보면 낯설게 느껴지는 것입니다.
또한, C++ 등 다른 언어에서는 클래스의 실제 메모리 구조를 숨겨서 처리하는 반면, Objective-C는 C언어를 기본으로 작성되었기 때문에 C언어와 구조적으로 비슷합니다. Objective-C는 C언어에 디자인 패턴에 객체 지향 시스템을 추가한 것이라고 생각할 수 있습니다.
Java 및 C++에서는 클래스 개념과 객체 생성 방법에 대한 것을 언어 사양으로 규정하고 있습니다. 하지만 Objective-C에서는 클래스 개념 및 생성 방법이 헤더 파일에 정의되어 있으며, 그 실체는 C언어의 typedef 문장으로 구현되어 있습니다. C언어와의 친화성이 높은 것은 좋지만, 다른 객체 지향 언어를 사용했던 개발자는 이해하기 힘들지도 모릅니다. 반대로, C언어에 객체 지향 디자인 패턴을 도입한 점은 추가된 언어 사양과 기반 구조를 지원 해주기 때문에, C개발자가 좋아할 지도 모르겠습니다.
Objective-C 구현
Mac OS X를 사용하고 있는 경우 기본적으로 제공되는 개발 패키지를 설치하는 것만으로도 Objective-C를 바로 사용할 수 있습니다. 그러나, Objective-C는 Mac OS만을 위한 언어는 아닙니다. GCC 컴파일러에서 Objective-C를 컴파일 할 수 있기 때문에, Linux에서도 이 언어를 사용할 수 있습니다. Windows에서도, Windows용으로 컴파일 된 GCC 컴파일러를(Mingw / Cygwin) 설치하여 사용할 수 있습니다.