본문 바로가기

관심사

오브젝티브-C의 생일을 축하한다

728x90
반응형


오브젝티브-C의 생일을 축하한다.


> Trente ans d’Objective-C [12.03.2013 16:00]

그레이엄 리(Graham Lee)가 아니었더라면, 우리는 아마 오브젝티브-C의 서른 번째 생일을 지나쳤을 것이다. 오브젝티브-C는 애플, 심지어 넥스트가 발명하지는 않았다. 거대 기업 IIT에 근무하던 미국의 두 개발자가 만들었었다. 오브젝티브-C의 역사에 대해 돌아 보도록 하자.


MacG Mobile 다음 버전의 코드

생물수학자였던 브래드 콕스(Brad Cox)는 신경망 연구직을 버리고 개발자로 나섰다. 그 때가 1970년대 후반, 그가 들어갔던 곳은 명성이 안 좋았던 미국 거대 기업 ITT였다. 이곳에서 그는 동료인 톰 러브(Tom Love)와 함께 코드 재사용 문제에 관심을 가졌었다.

당시 개발 프로젝트 대부분은 구조화 프로그래밍(structured programming) 원칙을 사용하고 있었다. 구조와 프로그래밍이란 이해하기 쉽도록, 거대한 프로그램을 여러 하위 프로그램으로 나누는 기법이었다. 따라서 구조상 "사용한 코드"를 다른 부분에서 재사용할 수가 없었다. 이 문제를 해결하기 위해 앨런 케이(Alan Kay)는 10여년간 스몰톡(Smalltalk)이라는 객체지향 프로그래밍(OOP)을 통해 객체(object)라는 해결책을 만들었다.

그런데 당시 OOP와 그 가능성에 대해 관심을 가진 개발자가 콕스만이 아니었다. 1978년 이래 덴마크의 비야네 스트롭스트룹(Bjarne Stroustrup)은 C++라 불리게 될 언어를 작업중이었다. 스트롭스트룹과 마찬가지로 콕스는 ITT의 언어였던 C 언어 상에서 작업하고 있었지만, 스몰톡-80의 컨벤션에서 영감을 얻었었다. 그 결과물이 오브젝티브-C의 조상인 OOPC(객제치향 프리-컴파일)이었다.

콕스와 러브는 ITT를 떠나 OOPC를 작업하기 위해 나중에 StepStone으로 불리게 되는 Productivity Products International을 창업했다. 콕스는 이제 오브젝티브-C가 된 OOPC를 객체지향 언어의 기나 긴 체인의 핵심으로 간주했다. 사실 그는 자신의 이론을 핵심 주제로 책을 펴냈었다. Object-Oriented Programming, An Evolutionary Approach(1판은 1986년에, 2판은 1991년에 나왔다.) 이 책은 객체지향 프로그래밍의 성서이면서 오브젝티브-C의 첫 번째 버전이 들어있기도 했다.



넥스트스텝 개발 기간 동안 스티브 잡스와 그의 엔지니어들은 명예롭게도 견고하고 장래성 있는 기반을 채택했다. 1988년에 오브젝티브-C를 채택한 마흐 커널상에서 유닉스 시스템을 구축하는 것이었다. 잡스의 프리젠테이션을 보면 만들어진지 거의 20년 된 1990년대 내내 잡스는 객체지향 프로그래밍과 오브젝티브-C의 이익을 계속 주장했었다. 객체지향 프로그래밍에 대한 그의 정의를 보자. 언제나처럼 대단히 분명하면서도 시적(詩的)이다.

객체는 사람과 같습니다. 일을 어떻게 하는지에 대한 지식과 기억을 갖고 있으면서 살아 숨쉬는 존재에요. 매우 낮은 수준에서 상호 작용하기보다는 매우 높은 추상화 수준에서 상호작용하는 겁니다. 우리가 지금 이러고 있는 것처럼 말이죠.

사례를 알려드리죠. 제가 당신의 세탁기 객체라면, 더러운 옷을 제게 주셔서 "옷 좀 빨아주십시오"라 메시지를 보낼 수 있습니다. 저는 샌프란시스코 최고의 세탁소가 어디인지 알고 있고, 때마침 영어를 할 줄 알며, 주머니에 돈이 좀 있어요. 그럼 밖에 나가서 택시를 타고 샌프란시스코 최고의 세탁소로 갑니다. 거기에서 옷을 세탁하고 다시 택시 타고 돌아와서 깨끗해진 옷을 주며 말하죠. "세탁한 옷 여기 있습니다"하고요.

제가 뭘 어떻게 했는지 당신은 전혀 모릅니다. 세탁소가 어디였는지도 모르죠. 아마 당신이 불어를 해서 택시를 잡지 못 할 수도 있어요. 게다가 돈을 내지 않았고 주머니에 돈도 없습니다. 예. 그런 일들은 다 제가 한 것이죠. 당신은 알 필요가 없는 일들이에요. 이 모든 복잡함이 제 안에 숨겨져 있으며, 우리는 매우 높은 수준에서 상호작용했습니다. 객체가 하는 일이 이런 겁니다. 복잡함을 캡슐화 시켜서, 매우 높은 수준에서 돌아갈 복잡성의 인터페이스 역할을 객체가 하죠.

비록 컴퓨터 사업 실패 이후, 소프트웨어 및 서비스 사업에 매진했지만, 1990년대 내내 오브젝티브-C의 개발을 이끌어 간 끝에 넥스트는 1995년 오브젝티브-C의 권리마저 사들였다. StepStone은 빈 껍질처럼 됐고, 넥스트는 StepStone의 제일 유능한 엔지니어들을 고용했다. 오늘날의 오브젝티브-C의 직접적인 토대였다.

넥스트스텝은 점차 완전한 운영체제의 모습을 잃어 갔다. 넥스트는 Sun과 함께 독립적인 객체지향 API 사양, 오픈스텝(OpenStep)을 개발했다. 가령 GNUstep 안에 들어간 GNU 프로젝트가 오픈스텝을 구현했으며, 오브젝티브-C로 개발한 애플리케이션을 사용하는 GNU/리눅스 배포판도 존재한다. 오픈스텝은 또한 오에스텐의 Cocoa와 iOS의 코코아의 기반이기도 하다. 애플이 넥스트를 4억 2,900만 달러에 매입했음은 알고 계실 것이다.


Rhapsody 1.0 (1997), l'ancetre d'OS X derive d'OPENSTEP.

오늘날 오브젝티브-C는 애플 장비용 개발과 동의어에 가깝다. C(++)의 카본(Carbon) 애플리케이션 개발은 이제 거의 없으며, 다른 언어의 도움을 받고 Cocoa로 인터페이스를 만드는 경우도 드물다. 다른 플랫폼을 위한 오브젝티브-C 개발자는 손에 꼽을만 하다.

애플은 기술 발전과 자사의 필요때문에 오브젝티브-C를 계속 지원하고 있다. 가령 오브젝티브-C 2.0은 맥오에스텐 레퍼드와 아이폰의 등장과 때를 같이 했다. 다이나믹 메모리 관리나 신택스 수정 등 현대화와 최적화가 필요했기 때문이다.

하지만 우리는 오브젝티브-C의 성공이 iOS와 앱스토어로 나타난 것이 아니라는 사실을 종종 잊는다. 한 번도 대중적인 적이 없던 점이 사실이지만, 넥스트가 오브젝티브-C로 만들어 놓은 개발환경은 자바같은 다른 언어에 영감을 주었으며, 독특하고 혁신적인 개발을 할 수 있도록 해줬다. 웹이 넥스트 플랫폼에서 처음 만들어진 것도 전혀 우연이 아닌 셈이다.

그러니까, 생일 축하한다. 오브젝티브-C.

반응형