애플 컴퓨터(Apple Computer)는 최근 매킨토시 개발자와 관리자를 위한 도서를 출간하기 위해 오라일리사(O"Reilly and Associates)와 팀을 구성하였다. 오라일리는 이번에 새로 출시한 운영 체제인 Mac OS X(오라일리에서 지향하는 오픈 소스 운동과도 연관이 있다)에 관한 도서를 출간하기 위해 애플사와 함께 일하고 있다.
Learning Cocoa는 이러한 협력을 통해 가장 먼저 만들어진 책이다. 이 책은 애플사의 저자진과 기술자가 저술하였다. 우리는 애플에 요청하여 Cocoa 애플리케이션의 환경에 대해 정리하고, 이 기술이 개발자에게 어떤 가치가 있는지 알려달라고 요청하였다.
오라일리: Mac OS X은 애플 운영 체제에 있어서 혁명적인 변화입니다. Cocoa는 어떤 점에서 애플의 새로운 OS에 적합합니까?
애플: Mac OS X은 세 가지 애플리케이션 환경(순수 자바 환경을 포함하여)을 지원하며, 각각은 특정 타입의 애플리케이션을 위해 고안되었습니다.
Classic 환경에서는 대부분의 Mac OS 9 애플리케이션을 실행할 수 있었습니다. Classic은 양립 가능한 환경이었기 때문에 Aqua나, Darwin이 지원하는 구성상 업그레이드된 부분 등 새로운 Mac OS X의 요소를 지원하지 않았습니다.
Carbon 환경은 Mac OS X에 맞게 코드가 최적화된 모든 Mac OS 9 애플리케이션에서 잘 돌아갑니다. Carbon API에 맞게 코드를 변환하면, 보호 메모리, 선취형(preemptive) 멀티태스킹 등 Darwin의 특성을 애플리케이션에서 사용할 수 있습니다.
Cocoa에서는 차세대 애플리케이션을 만들기 위해 더 나은 객체지향 프로그래밍 환경을 제공합니다. Cocoa를 사용하면 보호 메모리, 선취형 멀티태스킹, Quartz 그래픽 시스템, Aqua 사용자 인터페이스 등 Mac OS X의 모든 요소에 완벽하게 접근할 수 있습니다.
Cocoa를 사용하면, 개발자는 Mac OS X에서 사용할 애플리케이션을 신속하게 만들 수 있습니다. Mac OS X이 출시되고 몇 주가 지나자 강력한 Cocoa 애플리케이션이 시장에 나왔습니다. 사실 애플 자체도 Cocoa에 많이 의존하고 있습니다. Mac OS와 함께 나온 애플리케이션 중 상당수가 Cocoa를 사용하여 개발되었습니다.
오라일리: Cocoa는 NEXTStep에 얼마나 의존하고 있나요? 이 기술은 한동안 주류를 이루지 않았습니까?
애플: Cocoa는 NeXTStep에 기반하고 있지만, 그 이후에 많이 바뀌었습니다. Cocoa는 Mac OS X의 고급 사용자 인터페이스인 Aqua를 구현합니다. 그것은 이미지나 사운드, 폰트 등에서 훨씬 많은 파일 포맷을 인식하며, 오늘날 표준으로 자리잡고 있는 PDF나 XML, HTML 등을 지원하고, OpenGL과 QuickTime과 통합되어 있습니다.
NeXTStep이 나온 후 컴퓨팅의 세계는 많이 변하였으며, Cocoa에서는 그런 변화들을 반영하여 개발자나 사용자가 쉽게 사용하면서도 힘을 모두 활용할 수 있도록 하였습니다.
오라일리: 애플은 Mac OS X의 BSD 루트로 개발자의 관심을 끌고 있나요?
애플: 물론입니다. 우리는 이미 유닉스에서 파생된 여러 제품으로 작업하는 사람의 관심을 끌었습니다. 고등 교육 기관과 컴퓨터 관련 커뮤니티에서는 Mac OS X이 UI로 완전히 지원되며 유닉스 기반 커스텀 애플리케이션을 모두 구축하고 실행할 수 있다고 생각하면서 관심을 보이고 있습니다.
오라일리: Cocoa의 발전된 객체지향 API를 통해 개발자는 자바와 Objective-C 모두 사용할 수 있습니다. 이로 인해 매킨토시용 애플리케이션 개발이 어떻게 변화할 것이며, 개발자 커뮤니티에서 이것을 어떻게 받아들일까요?
애플: 객체지향 프로그래밍 자체가 전통적인 절차 프로그래밍보다 생산성이 높습니다. 게다가 Cocoa는 원래 Mac OS X이며 그와 통합이 잘 되는 API를 제공합니다. Cocoa는 Aqua 등 Mac OS X의 다양한 고급 특징을 구현하며, QuickTime, OpenGL, Posix 계층(layer) 등에 빠르게 접근할 수 있습니다. 이러한 점 때문에 Mac OS X 개발자는 Cocoa를 완벽한 개발 환경으로 사용할 수 있습니다. 특히 플랫폼에 처음 사용하는 것이나 새로운 프로젝트를 시작할 때 유용합니다. Objective-C와 자바를 사용하면 Cocoa 애플리케이션을 개발하기 더 좋습니다.
Cocoa에 대한 관심은 꾸준히 증가했으며, Cocoa를 새로 배우기 시작하는 개발자도 늘어났습니다.
오라일리: 『Learning Cocoa』에서는 이 책을 읽은 후 개발자들이 Cocoa를 사용하고 싶어할 것이며, 애플리케이션을 개발하는 일이 쉽고 재미있어질 것이라고 언급되어 있습니다. Cocoa의 어떤 점이 개발자에게 매력적인가요?
애플: Cocoa를 사용하면 쉽게 작업을 해낼 수 있고 할 수 없을 것 같이 보이는 작업도 가능합니다. Cocoa는 애플리케이션에서 거의 같은 방법으로 처리하는 일에 대해서는 매번 직접 작업할 필요가 없다는 개념에 초점을 맞추어 디자인되었습니다.
Cocoa는 이러한 공통 영역에서 완벽한 솔루션을 제공합니다. 하지만 개발자가 무언가 다른 것을 원할 때에는 고객화도 쉽게 되도록 디자인되어 있습니다.
| |
|
| Cocoa는 애플리케이션에서 거의 같은 방법으로 처리하는 일에 대해서는 애플리케이션에서 매번 직접 작업할 필요가 없다는 개념에 초점을 맞추어 디자인되었습니다. |
|
| |
애플리케이션을 작성하려면 되풀이해서 해야만 했던 작업이 Cocoa에는 프레임워크로 구성되어 있습니다. 따라서 생산성을 높이기 위해서든, 워드 프로세서이든, 게임을 만들든, 코드 작성에만 전념하면 됩니다. Mouse-down 이벤트가 창의 타이틀 바에 있는지 스크롤 바에 있는지 등의 관리는 해 줄 필요가 없습니다. 표준 폰트 대화나 컬러 대화를 사용할 때 단 한 줄의 코드도 작성할 필요가 없습니다. 그리고 철자 체크, PDF 변환, 다중 언어 지원 등 고급 특성이 많습니다.
게다가 Interface Builder 덕택에, 사용자 인터페이스를 프로토타입으로 하고 즉시 실행할 수 있습니다. Interface Builder는 코드를 생성하지 않는 대신 객체를 저장(archive)하는데, 이것은 여러 번 수정될 수 있습니다. 그래서 애플리케이션의 나머지 부분을 건드리지 않고도 사용자 인터페이스를 언제든지 수정할 수 있습니다.
오라일리: 『Learning Cocoa』는 경험 많은 객체지향 프로그래머를 대상으로 한 책입니까, 아니면 객체지향 언어에 대한 지식이 전혀 없어도 이 책을 유용하게 사용할 수 있습니까?
애플: 『Learning Cocoa』는 어느 정도 프로그래밍 경험이 있는 개발자를 대상으로 한 책입니다. 하지만 객체지향에 대한 지식이 많이 필요한 것은 아닙니다. C 기반의 프로그래밍 언어에 친숙하다면 이 책을 읽고 실무에 바로 활용할 수 있을 것입니다. 사실, 예제를 꼼꼼히 살펴보면서 공부를 한다면, Cocoa 프레임워크를 익히는 것이 객체지향의 개념을 익히기에 좋은 방법이 될 수 있습니다. Cocoa의 프레임워크는 객체지향적 디자인 패턴으로 가득 차 있기 때문에, Cocoa를 사용하든, 그렇지 않든 도움이 될 것입니다.
오라일리: Objective-C는 Cocoa 언어의 원형입니다. Objective-C를 사용하였기 때문에 생긴 장점이 있나요?
애플: Objective-C는 C의 작은 수퍼세트(superset)이며, C++보다 훨씬 익히기 쉽습니다. 작고 효율적이며, 완전히 객체지향적입니다. 타겟/액션 패러다임이나 nib 파일에서 객체를 freeze-dry하는 능력 등 Cocoa의 많은 특성은 Object-C의 역동적인 특성에 많이 의존합니다. 객체지향 프로그래밍의 경험이 있든지 없든지, 많은 프로그래머가 머지 않아 Objective-C를 수용할 것입니다.
오라일리: nib 파일이 무엇이며, 언제쯤 그것을 볼 수 있을까요?
애플: "nib" 파일은 애플리케이션에 필요한 사용자 인터페이스 정보를 저장합니다. 어떤 애플리케이션에 사용자 인터페이스를 만들면, 객체를 저장(archive)하거나 "freeze drying"하여 그 정보가 nib 파일에 저장됩니다. 애플리케이션이 실행되면, nib 파일이 로딩되고 객체가 다시 활성화되고, 사용자 인터페이스를 다시 만듭니다. 여기서 중요한 점은 사용자 인터페이스를 구현하기 위해 코드가 전혀 필요하지 않다는 것입니다. 이는 애플리케이션에 어떤 코드를 작성하는지에 상관 없이, 인터페이스는 영향을 받지 않고 조정할 수 있다는 것을 의미합니다.
오라일리: Cocoa의 중심에는 Foundation 프레임워크와 Application Kit 프레임워크가 있습니다. Cocoa 애플리케이션을 개발할 때 이 프레임워크가 하는 역할은 무엇입니까?
| |
|
| 애플 자체도 Cocoa에 많이 의존하고 있습니다. Mac OS와 함께 나온 애플리케이션 중 상당수가 Cocoa를 사용하여 개발되었습니다. |
|
| |
애플: Foundation 프레임워크는 "저급" 프레임워크이며, 시스템과 OS 수준의 서비스를 제공합니다. Foundation은 프로그래머와 운영 체제 사이에 추상화 레이어(layer)를 제공합니다. 문자열(유니코드 완전 지원) 등 기본 타입을 위한 객체를 제공하며, 사전이나 배열 등 기본함수 컬렉션도 제공합니다. 사용자 인터페이스 서비스를 제공하지 않으며, Quartz나 Aqua에 의존하지 않습니다. 이 때문에 사용자 인터페이스가 없는 서버나 다른 툴에 의해 적절히 사용할 수 있습니다.
AppKit은 그래픽 사용자 인터페이스를 사용하는 애플리케이션을 위한 프레임워크입니다. 애플리케이션에서 이벤트 처리(event handling)을 위한 시스템을 제공하며, 애플이 Aqua의 모든 이점을 공급하기 위해 사전에 설계하고 디자인한 사용자 인터페이스 요소(element)가 많이 있습니다. 시스템의 나머지 부분이 상호 작용하는 다른 서비스도 물론 많이 있습니다. Foundation 기본 타입은 애플리케이션 킷에서 널리 사용됩니다. 예를 들어서, 애플리케이션에서 윈도우의 리스트를 요청하면, NSWindow 객체(AppKit 타입)의 배열(Foundation 타입)로 이동할 것입니다. 사용자 인터페이스가 있는 애플리케이션은 AppKit와 Foundation 프레임워크 둘 다 사용합니다.
오라일리: Project Builder와 Interface Builder의 기능을 설명해 주십시오.
애플: Project Builder는 Mac OS X에서 사용하는 원시 IDE입니다. 그것은 시스템과 통합이 잘 되며 자바, Object-C, C++, 그리고 Mach-O 실행가능(executable) 포맷, 번들, 프레임워크 등 Mac OS X의 다른 특징들과도 통합이 잘 됩니다. Cocoa 개발자는 애플리케이션을 개발할 때 Project Builder를 주로 사용하게 될 것입니다. Interface Builder는 사용자 인터페이스를 만들기 위해 사용되며, Cocoa에서 꼭 필요한 부분입니다. Interface Builder를 사용하여 Cocoa 애플리케이션에서의 사용자 인터페이스를 만들거나 수정할 수 있습니다. Interface Builder는 Cocoa 개발에 있어서 널리 사용됩니다. 애플리케이션이 창을 생성하고 버튼 등의 컨트롤을 프로그램적으로 갖추는 것은 드문 일입니다. 그것이 가능할 때에는, Interface Builder가 애플리케이션의 사용자 인터페이스를 만들기 쉽습니다.
오라일리: 프로젝트의 인덱스를 만들 때 Project Builder가 하는 일은 무엇입니까? 인덱스를 만드는 것이 항상 좋습니까?
애플: Project Builder는 소스 코드를 분석하고 당신이 정의한 클래스나 당신이 가지고 있는 메소드 등 중요한 정보를 기억함으로써 프로젝트의 인덱스를 만듭니다. Project Builder에 DT는 많은 특성은 정보를 함수에 인덱싱하는 데에 의존합니다. 가능한 한 프로젝트의 인덱스를 만들어두는 것이 좋습니다.
오라일리: Window Server와 NSWindow 객체 사이의 관계를 설명해 줄 수 있습니까?
애플: WindowServer는 스크린을 관리하는 시스템 서비스입니다. 무엇보다도, 그것은 이러한 영역을 "windows"라고 부릅니다.
오라일리: 파일 시스템에서 파일을 관리하기 위해 Cocoa가 제공하는 클래스의 종류는 어떤 것입니까?
애플: Foundation에 있는 NSFileManager에서 Posix 호출이 하는 많은 일을 합니다. 하지만 NSString 등 더 편리하고 Cocoa에 적합한 API가 추가되었습니다. 이것을 사용하여 파일과 폴더를 옮기거나 복사하거나 지우고, 정보를 얻고, 폴더의 내용을 열거할 수도 있습니다.
그리고NSURL이 있는데, URL 형식 뿐 아니라 file:// URLs의 형태로도 사용 가능합니다. AppKit에 있는 NSFileWrapper는 파일 패키지를 관리하는 등, 문서 수준의 파일 처리를 많이 합니다.
Foundation에 있는 NSBundle은 애플리케이션에 속한 리소스나 파일을 열거하거나 로드하는 데에 사용될 수 있습니다. 여기에는 지역화된 변수를 올바르게 사용하고 사용자가 선택한 언어에 적합한 버전을 로딩하는 것이 포함됩니다.
NSData, NSDictionary, NSString, NSImage 등의 클래스는 파일을 읽고 쓸 수 있는 함수를 제공합니다. 전형적으로 파일 스트림을 만들거나 이미지의 컨텐츠를 바이트로서 작성하지 않고, NSImage 객체에 어떤 파일에 스스로를 작성하라고 명령하기만 하면 됩니다.
오라일리: Cocoa 애플리케이션이 어떤 식으로 다른 애플리케이션과 통신합니까?
애플: Cocoa 애플리케이션 사이에서 분산 객체를 사용할 수 있습니다. 서로 다른 애플리케이션에 있는 객체가 서로 명확하게 호출합니다. 마치 동일한 애플리케이션에서 호출이 일어나는 것처럼 말이죠. Cocoa와 Carbon 애플리케이션 사이에서 AppleEvent나 저급의 장치를 사용할 수 있습니다.
게다가, 분산 통지(NSDistributedNotificationCenter)는 애플리케이션 사이의 이벤트("user preference changed", "networking configuration got updated" 등)를 전달하는 데에 사용할 수 있습니다. 애플리케이션 간에 정보를 교환하는 가장 직접적인 방법은 클립보드를 사용하여 정보를 이쪽 저쪽으로 보내는 것입니다. 드래그 앤 드롭(drag and drop)이 작용하는 방법이며, 서비스가 구현되는 방법이기도 합니다. 그리고 저급의 하부시스템은 모두 Cocoa 애플리케이션에서 사용할 수 있으며, TCP/IP 등 커뮤니케이션 서비스도 사용할 수 있습니다.
오라일리: 『Learning Cocoa』는 애플과 오라일리가 출판 계약을 맺고 만든 첫 번째 책 중 하나입니다. 애플이 OS X 관련 도서를 함께 만들 파트너로 오라일리를 택했습니까?
애플: 우리는 오라일리가 기술 서적 출판에서 선도적인 위치에 있으며, 애플의 현재와 미래 개발자가 오라일리를 존경하고 있을 것이라고 생각했기 때문에 오라일리를 선택했습니다. 오라일리는 개발자 사이에서, 특히 유닉스와 자바 커뮤니티에서 평판이 좋습니다. 유닉스나 자바 커뮤니티에서는 Mac OS X에 지대한 관심을 갖고 있다고 생각합니다. 우리는 오라일리사와 함께 일하게 되어서 기쁘며, 개발자에게 Mac OS X 개발에 관한 품질 좋은 책을 제공하고 싶습니다.