오브젝티브-C

위키백과 ― 우리 모두의 백과사전.

오브젝티브-C (Objective-C, 종종 ObjC로 표기) 언어는 C 프로그래밍 언어스몰토크 스타일의 메시지 구문을 추가한 객체 지향 언어이다.

1980년대 초에 브래드 콕스(Brad Cox)가 만들었다. 1988년에 넥스트사의 워크스테이션 NeXT의 사용자 인터페이스인 NextStep에 사용됨으로써 널리 알려지기 시작하였으며, 1996년 애플이 넥스트 사를 인수한 후 맥 오에스 텐의 코코아 애플리케이션 프레임워크의 표준 프로그래밍 언어로서 쓰이고 있다.

[편집] 문법

오브젝티브-C는 C 위에 덮인 얇은 레이어로 볼 수 있다. 오브젝티브-C는 C++와 달리 C 언어의 제한적인 상위집합이다. 그러므로, 어떠한 C 프로그램도 오브젝티브-C 컴파일러를 통해 컴파일할 수 있다. C 언어와 스몰토크 양쪽에서 유래한 문법을 사용하고 있다. (사전처리preprocessing, 표기expressions, 함수 선언function declarations, 그리고 함수 호출function calls등과 같은) 대부분의 문법은 C에서 상속된 것이며, 객체지향적인 기능들은 스몰토크 방식의 메시지 전달을 통해서 구현되었다.

C++와는 달리 다중상속을 지원하지 않으며, 그 대신 자바의 인터페이스에 해당하는 프로토콜(protocol)을 정의할 수 있다. 또한 카테고리(category)를 통해 기존 클래스에 새로운 메쏘드를 추가함으로써 클래스의 기능을 확장할 수 있다. 이는 상속을 통해서만 기능을 확장할 수 있는 대다수의 객체지향 언어와 크게 구별되는 특성이다. C++나 자바 등과는 달리 객체에 대해서 완전한 동적 형 변환(dynamic typing)을 지원한다.

[편집] 메시지

메시지는 객체지향 프로그래밍을 지원하기 위해 내부적으로 추가된 문법이다. 오브젝티브-C의 객체 지향 프로그래밍에 대한 모델로 메시지를 객체에 전달하는 방식을 채용하고 있다. 이는 스몰토크와 매우 유사한 모델이다. 하지만 이는 C++과 다른 언어에서 사용하는 시뮬라(Simula) 프로그래밍 모델과는 구별되는 것이다. 이러한 특징은 중요한 의미를 갖는다. 오브젝티브-C의 기본적인 차이점은 메소드를 호출하는 것이 아니라 메시지를 전달한다는 것이다.

메소드 doSomething를 갖는 클래스인 obj라는 개체가 구현된다면 이는 메시지 doSomething에 대해서 "응답"하는 것이다. C++에서는 doSomething 메시지를 obj로 보내는 행위는 다음과 같은 코드를 필요로 할 것이다:

obj.doSomething();

오브젝티브-C에서는 다음과 같이 쓰인다:

[obj doSomething];

이러한 작동 방식은 심지어 객체가 메시지에 응답할 수 없다 하더라도 그 개체에 메시지를 보낼 수 있도록 해준다. 오브젝티브-C는 동적 형 변환을 사용한다. 이는 모든 메소드가 사전에 정의되어야만 호출이 가능한 (C++이나 자바와 같은) 정적/명시적 형 변환을 사용하는 언어와 다른 점이기도 하다.