저자: 마이크 빔(Mike Beam), 역 한빛리포터 왕수용
많은 사람들이 Mac OS X 출시만을 기대하며 새로 사 놓은 맥에 이제 막 출시된 Mac OS X을 설치해 봤을 것이다. 설치한 후 처음엔 진지하게 이것 저것 살펴보고 새로운 기능도 찾아보았을 테지만, 얼마 있지 않아 백번도 넘게 본 "지니" 효과에 실증을 느끼게 될 것이다. 맥의 우아함과 유닉스의 강력함이란 말 그 자체에 대한 자부심만 가진채 말이다.
그러나 이제부터는 Mac OS X을 좀더 근본적으로 이해하고 싶고, 프로그램을 작성하고 싶고, 그 프로그램이 내가 생각한 데로 동작하는 모습을 보고 싶을 것이다. 다행이 Mac OS X에는 개발 도구가 공짜로 포함되어 있다. 그 개발 도구는 애플 자신이 Mac OS X과 나머지 프로그램을 만든 바로 그 개발 도구이다. 애플은 이제 맥을 가진 모든 사람이 자유롭게 프로그램을 만들 수 있게 개발 도구까지 무료로 제공해주고 있다.
본 기사를 통해, 필자는 지금까지 응용 프로그램 개발에 대한 경험이 부족한 독자라고 하더라도(조금은 개발 경험이 있으면 도움이 되겠지만) Mac OS X용 응용 프로그램을 만들 수 있게 되리라 확신한다.
이제 기나긴 여정의 시작이다. 필자는 앞으로 코코아 API와 관련한 객체 지향 프로그래밍에 관한 기사를 종종 게재할 생각이다. 힘들다고 생각될 수도 있겠지만 실제로는 그렇지 않다. 처음에는 필자의 개인적 경험을 위주로 이야기 할 것이다. 그리고 코코아 API가 어떻게 Mac OS X과 관련해 있는지를 설명할 것이다. 그리고 그 다음부터는 코코아 프로그램도 만들어 나갈 생각이다.
이제 독자여러분과 함께 여행을 떠나기 전에 필자가 그동안 지내오면서 겪었던 느낌부터 써보겠다.
시작하기
Mac OS X Public Beta가 출시된 2000년 가을, 필자는 "코코아 프로그래밍을 배워보는 것이 어떨까…" 하는 생각을 하게 되었다. 실제로 필자는 C 이외의 어떠한 프로그램도 해본적이 없었다. 더 솔직하게 말하면 객체지향 프로그래밍에 대해서도 잘 몰랐고, 최신 프로그래밍에 대해서는 더더욱 몰랐다. 윈도우가 뜨는 GUI 프로그램에 거기에 환경설정이 가능한 프로그램을 만든다니… 정말 생각도 못해본 일인데 어디서부터 배워야 할 것인가?
그래도 일단 배우기 시작하면 잘 할 것 같다는 생각이 들었다. 그리고 "그 화려한 Mac OS X의 이면에는 무엇이 있을까"에 대한 궁금증도 필자를 이끌었다. 그리고 이 모든 것이 어떻게 동작하는 것인지 그 원리도 궁금했었다. 바로 이때 들은 바로는 코코아가 가장 훌륭한 출발점이라 하였다.
코코아가 Mac OS X이고, 코코아로 만들어야 진정한 Mac OS X 용 프로그램을 만든다고 했다. 개발 도구을 다운받고 설치가 끝나고 곧 드래그 앤 드롭으로 인터페이스를 만드는 인터페이스 빌더를 보고 필자는 정말 놀라고 말았다. Mac OS X에 숨어있는 놀라운 NeXT의 숨결을 느낀 것이다. 모든 것이 너무 멋졌다. 그렇지만 이 모든 것들을 머리 속에 집어 넣기도 어려운 일이었다.
처음에는 코코아를 배우기가 쉽지 않았다. 코코아와 Objective-C에 대한 문서가 거의 없었기 때문에 낡은 기계처럼 털털거리면서 시작하였다. 애플은 모든 힘을 카본(Carbon)에만 쏟았다. 당연하겠지만, 기존의 프로그램을 OS X으로 포팅하는게 더 급했었다.
코코아로 "Hello World"를 만드는 법이나 그와 유사한 웹 페이지는 찾을 수 있었지만 그것들을 서로 조합해서 이해하기는 힘들었다. 그러나 차차 시간이 지나면서 점점 머리 속의 모든 내용이 정리가 되면서 이해되기 시작했다. 그리고 모든 것이 이해가 되면서 코코아의 엄청난 가능성과 놀라운 기술들이 차츰 보이기 시작했다.
그래서 곧 코코아로 프로그램을 만들기 시작했다. 그리고 필자처럼 코코아를 어렵게 시작해야 할 이유가 없다는 생각도 들었다. 그리고 많은 사람들이 어렵지 않게 애플이 코코아에 심어놓은 놀라운 것들을 볼 수 있고 생각 했다. 코코아는 프로그래밍 경력에 상관없이 쉽게 접할 수 있고, 모든 맥 유저에게 열려있는 진보적이고 강력한 프로그래밍 환경이다.
앞으로 필자가 계속 기고할 기사를 통해, 필자는 독자들에게 코코아에서 제공하는 모든 것을 보여주고 싶고, 필요한 것들을 어떻게 사용하는지 설명하고 싶다. 물론 오라일리 특유의 방식대로 대부분 상세히 설명하는 형태가 될 것이다. 그대로 따라만 하면 된다. 마치 자기 차를 자기 마음대로 꾸밀 수 있는 것처럼 Mac OS X과 코코아만 있으면 자신만의 프로그램을 만들 수 있다. 이는 오픈 소스 문화이기도 한데, 애플은 이 문화를 잘 받아 들였다. 맥에서 꽃피는 일종의 유닉스 문화라고도 할 수 있겠다.
Mac OS X
Mac OS X은 여러 계층의 구조로 이루어져 있다. 복잡한 상부 시스템은 기본적인 하부 시스템의 기능을 이용하여 이루어져 있다. Mac OS X의 가장 아래 기초부분은 마크커널(March Kernel)이다. 마크 커널은 하드웨어와의 기본적인 접근과 제어기능을 OS에 제공한다.
가장 상위 레벨에는 BSD, 클래식, 자바, 카본, 코코아 즉, 5개의 Mac OS X 개발 환경이 있다. 각각의 개발 환경은 각자의 개발 프레임워크, 라이브러리, 실행환경 등을 비롯하여 상황에 따른 각자의 해법을 제시한다. 클래식 환경은 OS 9 이전에 개발된 프로그램을 실행해야 하는 상황에 필요하고, BSD는 유닉스 프로그램을 실행해야 할 때, 자바는 자바를, 카본은 카본 프로그램을 그리고 코코아는 여기서 다루게 될 코코아 프로그램을 실행하게 한다.
프레임워크와 API
코코아는 파운데이션(Foundation)과 Appkit으로 불리는 2개의 객체지향 프레임워크로 구성되어 있다. 이 프레임워크는 클래스들, 함수들, 사용자 정의 데이터 타입을 비롯한 몇몇 기타 내용물로 구성되어 있다. 코코아는 이 두 프레임워크로 구성되어 있으며, 본 기사에서는 이 2개의 프레임워크를 사용하는 방법에 대한 이야기를 주로 할 것이다. 즉, 이 2개의 프레임워크를 이야기 하는 것이 바로 코코아를 이야기 하는 것이다.
프레임워크는 물론, 클래스와 함수에 접근하기 위한 API들이 있다. 코코아는 2가지 종류의 API가 있다. 하나는 Objective-C를 위한 API 이고 또 하나는 자바를 위한 API이다. 즉 말하자면, 자바를 이용해서 코코아 프로그램을 작성할 수도 있고, Objective-C 언어를 이용해서 코코아 프로그램을 작성할 수 있다는 말이다. 코코아 프레임워크 그 자체가 Objective-C로 만들어져 있기 때문에 당연히 Objective-C를 위주로 설명할 것이다. Objective-C가 생소하더라도 걱정할 필요가 없다. 배우기 매우 쉬운 언어이기 때문이다. 실제로 Objective-C는 ANSI C의 모든 내용을 포함하고 조금 더 추가한 형태이기 때문에 이미 C언어를 알고 있다면 Objective-C의 90퍼센트를 알고 있다고 봐도 된다. Objective-C는 단순히 C에 객체지향적 개념과 기법을 구현하기 위해서 언어적 요소를 조금 추가를 했을 뿐이다. 자세한 부분은 차차 진행을 하면서 설명 할 것이다.
하지만 Objective-C는 C의 데이터 타입과 기본적인 제어문 이상의 기능은 없다. Objective-C가 최신 프로그램을 만드는데 필요한 부족한 부분은 바로 파운데이션 프레임워크가 채워주기 때문이다. 파운데이션 프레임워크는 스트링, 텍스트, 숫자, 배열 처리와 관련된 일련의 유틸리티 클래스들의 집합이다. 또한 파일 시스템 I/O, 프로세스 관리와 같은 OS에서 제공하는 서비스와 관련한 클래스도 있다. 파운데이션 프레임워크는 최신 프로그램을 제작하기 위해 꼭 필요한, 유니코드 스트링 처리, 분산 객체 처리와 관련한 클래스도 지원한다. 앞으로 다루게 될 대부분의 내용은 이 파운데이션 프레임워크의 클래스 사용법에 대한 것이 될 것이다.
Mac OS X의 계층적 구조는 시스템의 모든 부분에 존재하고, 심지어는 코코아 내에서도 존재한다. 즉, 코코아의 또다른 프레임워크인 Appkit 프레임워크는 바로 이 파운데이션 프레임워크를 이용하여 만들어진 것이다. Appkit 프레임워크는 코코아의 다른 부분 즉, 인터페이스 및 애플리케이션 관리와 제어에 관한 부분을 담당한다.
AppKit은 일반 사용자 인터페이스를 만드는데 필요한 버튼, 윈도우, 스크롤바와 같은 모든 요소를 클래스로 제공한다. Appkit은 단순한 인터페이스 요소의 클래스만이 아니다. 이것은 응용프로그램과 문서 관리의 기본 구조을 제공한다. 그리고 폰트, 컬러, 그래픽, 프린팅 등을 표현하는 클래스도 있다. 또한 OpenGL도 지원한다. Appkit에는 맞춤법검사(영어), 드래깅, 오려두기와 베끼기 기능이 이미 다 구현되어 들어가 있다. 코코아를 이용하면 이러한 모든 서비스를 쉽게 이용할 수 있다. 애플은 모든 개발자들이 이러한 기능을 간단히 이용할 수 있도록 많은 노력을 들였다. 이것이 바로 코코아의 가장 강력한 장점이다.
다음번에는
다음번 기사에서는 객체지향 프로그래밍과 Objective-C에 대해 다룰 예정이다. 객체지향적 사고방식에 대해 연습할 것이고, Objective-C 프로그래밍도 직접 시도해 볼 것이다. 그리고 완전히 동작하는 코코아 프로그램(비록 간단한 것이지만)도 만들어 볼 것이다. 함께 프로그램을 만들면서 이 작업이 얼마나 간단하고 쉬운 것인지도 함께 알게 될 것이다. 이 외에도 파운데이션 프레임워크와 Appkit 프레임워크 내의 각각의 클래스를 비롯하여 각 클래스와 관련된 복잡한 개념에 대해서도 알아볼 것이다. 필자의 기사를 읽으면서 독자들이 많은 것을 해볼 수 있도록 많은 내용을 전달할 수 있었으면 좋겠다. 다음 번에는 좀더 재미있는 내용으로 독자여러분께 인사드리기를 기원하며… 오늘은 이것으로 마칠까 한다.
마이크 빔(Mike Beam)은 Geo Center Inc의 프로그래머이며 현재 오라일리 Cocoa 관련서를 집필중이다.