Objective-C와 브래드 콕스 (1944 – 2021)

 WorldWideWeb 최초의 웹 브라우저
WorldWideWeb, 최초의 웹 브라우저

팀 버너스 리가 1989년, 월드 와이드 웹을 발명하고, 이듬해 90년, NeXTcube 웍스테이션의 NeXTSTEP상에서 최초의 웹 브라우저인 WorldWideWeb1을 개발하였다. NeXTSTEP의 주 언어인 Objective-C로 프로그래밍되었고, 웹뷰는 Text 클래스2를 상속받아 구현하였다.

Objective-C는 브래드 콕스가 1980년대 초반부터 Smalltalk의 메시지 개념을 C언어에 도입하여 만든 객체 지향 프로그래밍 언어다. OOPC(Object Oriented Pre-Compiler)라는 전처리기preprocessor를 만들어 C코드를 생성하는 형태로 언어를 확장하던 것 등 비슷한 시기에 Simula의 영향을 받아 C언어에 클래스 개념을 추가하던 C++와 비슷한 전개이다.

This describes the Object Oriented Pre-Compiler, OOPC, a language and a run-time library for producing C programs that operate by the run-time conventions of Smalltalk 80 in a UNIX environment. These languages offer Object Oriented Programming in which data, and the programs which may access it, are designed, built and maintained as inseparable units called objects.3

스티브 잡스의 NeXT는 1988년 Objective-C를 라이선스하고 NeXTSTEP의 주 언어로 사용하여 AppKit과 Foundation 프레임웍을 만들었다. 이후 Objective-C의 권리를 NeXT가 인수하고, NeXT를 애플이 인수하면서 Mac OS X과 iOS의 프로그래밍 언어가 되었다.

브래드 콕스가 Objective-C를 상용화하기 위해 팀 러브Tim Love와 함께 세운 회사 Stepstone에서 NeXT로 옮긴 Steve Naroff가 GCC의 Objective-C 프런트 엔드 개발을 주도하였고, 이후 LLVM의 C계열 언어 프런트 엔드인 Clang 컴파일러의 개발을 주도하였다.4 2006년, Objective-C 2.0을 발표하며 프로퍼티를 추가하는 등 한 단계 현대화가 진행되었고, Swift의 개발이 시작된 이후에는 그 개발 과정에서 얻게 된 경험들이 ARCAutomatic Reference Counting, Literals 등으로 Objective-C에 추가되면서 지금의 모습을 갖추었다.5 90년대 초반에는 NeXT의 개발자들이 썬 마이크로시스템즈의 Oak 프로젝트6에 유입되어 자바에도 많은 영향을 주었다고 한다. 예를 들어, 동기화를 위한 자바의 synchronized 구문은 Objective-C와 매우 닮은 특징을 볼 수 있다.

올해 1월에 Objective-C의 발명가 브래드 콕스의 부고 소식이 있었다. 애플은 Windows 95보다 6년 늦은 2001년에 들어서야 선점형 멀티태스킹과 보호된 메모리를 사용하는 운영체제 Mac OS X을 내놓을 수 있었지만, NeXT에서 흡수된 Mach 기반의 Darwin 커널과 애플리케이션 프레임웍들로 “세상에서 가장 진보한 운영체제”라 홍보할 수 있었다. 현재 애플 플랫폼의 기반 대부분을 차지하고 있는 Objective-C 프레임웍들을 보면 프로그래밍 언어 자체보다 소프트웨어 컴포넌트와 재사용이 관심사였던 브래드 콕스가 꿈꾸던 모습이었을지도 모른다.

오늘, 3월 24일은 Mac OS X이 세상에 나온지 20년이 되는 날이다.


  1. 여기에서 0.15 버전의 소스코드를 확인할 수 있다: WorldWideWeb ↩︎

  2. 이후 1994년에 발표되는 OpenStep API 명세가 만들어지는 과정에서 현재 Cocoa(AppKit)의 NSText 클래스가 된다. ↩︎

  3. The object oriented pre-compiler: programming Smalltalk 80 methods in C language (ACM SIGPLAN) ↩︎

  4. 애플이 GCC 컴파일러를 Clang으로 대체하는 과정에서 Clang이 GCC의 drop-in replacement가 되도록 만들기 위해 자연스러운 결정이었을 것이다. Clang은 GCC의 많은 언어 확장과 컴파일러 인자가 호환된다. ↩︎

  5. Chris Lattner on the origins of Swift ↩︎

  6. 자바의 개발 초기에는 Oak 프로젝트로 불리었으며, 이후에 Green, 최종적으로 Java가 되었다. ↩︎