메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

파이썬에 코코아 한 잔?

한빛미디어

|

2002-03-22

|

by HANBIT

9,932

저자: 스티브 피긴스, 역 전순재

필자는 요즘 눈만 감으면 항상 맥(Mac)이 어른거려 미칠지경이다. 새로 나온 아이맥(iMac)을 보면 나도 모르게 넋이 나간다. 그 사랑스러운 TFT(역자주: Thin Film Transistor, 박막 트랜지스터를 일컽는 말로 노트북이나 랩탑 컴퓨터에 많이 사용되는 액정화면을 말함) 모니터를 보면 나는 신비한 주문에 걸린다. 그렇지만 아직까지는 파이썬과 OS X의 위치에 대해 의문을 품을 만큼의 정신은 있다.

OS X에서 현재 파이썬에는 세가지 선택, 실제로는 네 가지 선택 사항이 있다. 가장 확실한 파이썬 인터프리터인 맥파이썬(MacPython)은 클래식(classic) 애플리케이션으로 설치될 수 있거나(OS X 위에 건설된 가상 머신의 OS 9.1에 설치되거나) 또는 카본(Carbon) 애플리케이션으로 설치될 수 있다. 카본(Carbon)은 깔끔한 애플 맥 API(Apple Mac API)를 제공하는 실행시간 환경으로서 프로그래머들이 Mac OS 9에서 Mac OS X로 쉽게 마이그레이션 할 수 있도록 디자인되었다. OS X의 새로운 BSD 유닉스 코어인 다윈(Darwin)을 사용하면 파이썬을 유닉스 소스에서 컴파일 할 수 있다. 마지막으로 자이썬(Jython)이 있다. 자이썬(Jython)이란 파이썬을 100% 자바로 구현한 것으로 무언가 확실한 조언이 필요하다면 애플사가 개관해 놓은 OS X 시스템 기반구조를 보는 것도 좋다.

대다수의 사람들이 맥파이썬 클래식(MacPython Classic)을 고집한다. 맥파이썬(MacPython)을 카본(Carbon) 애플리케이션으로 설치하는 않는 가장 큰 이유는 Tk때문이었다. Tk는 카본(Carbon)에 맞지 않았다. 따라서 파이썬은 클래식(Classic)을 고집하여 고립될 수 밖에 없는 상황이다. 파이썬을 카본(Carbon) 애플리케이션으로 설치했다면 Tk를 사용할 수 없다. 그렇지만 Tk가 카본(Carbon)에 관심을 쏟고 있으며 버그를 찾아 고치게 되면 바로 Tk는 카본 파이썬(Carbon Python) 설치와도 작동될 것이다. Tk를 사용할 수 있게 된다면 앞으로 맥파이썬(MacPython)버전은 카본(Carbon)만을 지원할 것이며 기존 맥파이썬(MacPython)을 유닉스 파이썬으로 합병할 것이다.

Tk에 접근하는 것도 중요하지만 OS X에서 더 큰 문제는 "과연 코코아(Cocoa)에 접근할 수 있는가?"이다. 코코아(Cocoa, 코코아는 OS X를 위한 개발 프레임워크의 집합으로 오브젝티브 C(Objective C)로 작성되었으며 자바 애플리케이션에는 Java-Objective C bridge를 통해 사용할 수 있다)를 보고 자바 프로그래머들은 기쁨을 감추지 못하고 있다. OS X 애플리케이션을 작성하려고 한다면 코코아(Cocoa)야 말로 여러분이 원하는 것이며 파이썬 사용자로서, 필자 역시 코코아(Cocoa)를 원한다.

첫 맥파이썬(MacPython) 포트의 공헌자인 스티븐 머제스키(Steven Majewski)는 파이썬에서 코코아(Cocoa)에 접근하는 방법을 한참 작업하고 있다. 머제스키는 옛날에 진행하던 pyobjc 프로젝트를 되살렸다. 원래는 넥스트 스텝 운영체제(Next)용으로 작성되었지만 1998년 들어 거의 포기상태가 된 pyobjc 코드는 지난해 머제스키가 다시 시작할 때까지 동면상태로 있었다. pyobjc 모듈은 본질적으로 Python to Objective-C bridge이다. pyobjc 모듈은 Java bridge가 작동하는 방식과 거의 비슷하게 작동한다. 속도상의 문제로 pyobjc는 배열 및 문자열 같은 기본적인 객체들의 번역만을 처리하고 나머지는 NSProxy에 의존한다. NSProxy는 Objective-C에 있는 분산 객체 클래스로서 외래 객체 또는 존재하지 않는 객체를 대신하여 작업한다. 이 프록시(proxy)를 통하여 작업하면, Python 객체는 Objective-C 객체에 접속할 수 있으며 그 반대도 가능하다.

코코아(Cocoa) 프레임워크는 넥스트(Next)사의 프로그래밍 프레임워크를 업데이트한 버전이기 때문에 pyobjc 역시 코코아(Cocoa)와 함께 거의 잘 작동한다. 그렇지만 약간 업데이트를 할 필요는 있다. 최근 파이썬과 오브젝티브 C(Objective C) 양편에 변경이 있었기 때문에 새로운 가능성이 보일 것으로 기대된다. 최근까지 프록시에 위임된(proxied) Objective-C 클래스들은 파이썬 객체로 사용할 수 있었지만, 파이썬 클래스까지는 아니었다. 이것은 곧 그 클래스들을 하부클래스화 할 수 없다는 것을 뜻한다. 이전에 pyobjc는 위임 객체를 만들었고, 그 객체를 하부클래화할 수 있었다. 안타깝게도 현재 이 코드는 Mac OS X에서 작동하지 않는다. 그렇지만 파이썬 2.2에서는 새롭게 형(type)과 클래스(class)를 통일했기 때문에 파이썬 2.2 클래스들이 프록시에 위임된(proxied) Objective-C 클래스로부터 상속받을 수 있을 것이라고 생각한다. 또 Mac OS X의 Objective-C에 새로이 추가된 약간의 introspection 코드 덕분에 proxied 메소드들을 담은 사전을 구축할 수도 잇으며 각 메소드를 분주하게 테스트하는 대신에 사용할 수 있으리라 생각한다. introspection 메소드는 Python 2.2의 메타클래스(metaclasses)와 결합되어, lookup 메소드가 사용되는 동안 메소드 정보를 담은 사전을 임시저장 함으로서 서로 다른 lookup 메소드를 조율하는데 사용될 수 있다.

이론대로라면 희망이 넘치는 것으로 보이지만 시간이 좀 더 지나야 이 모든 향상들을 제대로 볼 수 있을 것 같다. 현 상황대로 Python 2.1과 현재의 pyobjc를 사용한다면, 코코아(Cocoa) 객체를 절차적으로 스크립트할 수 있다. 그런대로 작동하기는 하지만 Mac OS X에서 파이썬을 빛나게 해주었던 실제적인 프로그래밍 파워는 전혀 아니다. 현재 대부분의 맥파이썬(MacPython) 프로그래머는 카본(Carbon) 또는 클래식(classic)을 고집하거나 Tk와 같은 것을 사용하려고 할 것이다.

자바(Java)로 코코아(Cocoa)를 프로그램할 수 있다면, 자이썬(Jython)은 어떤가? 글쎄… 그 해답은 희망적이다. 물론 완벽하게 그렇다고 말할 수 없긴 하지만 말이다. Java to Objective-C bridge를 사용하여 자바(Java)로 코코아(Cocoa)를 프로그램 할 수 있다. 그 브리지는 그 둘 사이의 번역을 조정한다. 마찬가지로 자이썬(Jython)도 그 자체로 일종의 Python to Java bridge이다. 그래서 두 개의 브리지가 있고 수 많은 마법이 진행된다. 파이썬(Python) 객체를 자바(Java) 객체로 Java 객체는 오브젝티브-C(Objective-C) 객체로 번역한 후 다시 반대로 번역하기 때문이다. 이 번역 작업은 엄청나게 시간이 소모되고 충돌부담 또한 크다. 예를 들어, 자이썬(Jython)은 자바(Java) 문자열을 알고 있으며, 그래서 자바(Java) 문자열은 자동적으로 변환되어 마치 파이썬 문자열처럼 자이썬(Jython)에서 사용할 수 있다. 그러나 자이썬(Jython)은 코코아(Cocoa)의 NSstrings을 모른다. 그래서 코코아(Cocoa)의 NSstrings은 번역되지 않는다. 이 점은 모든 기본 객체에 대하여 마찬가지로 적용된다. 그것들과 작동하는 방법이야 있겠지만, 더 복잡해지기만 할 뿐이다.

스티븐 머제스키(Steven Majewski)가 나에게 말해준 바와 같이, "많은 것들이 거의 완벽하게 작동한다." 파이썬을 위한 코코아(Cocoa)는 여전히 개척중에 있으며, 모험가라면 사용해 볼 수 있다. 더욱 더 쉽게 접근하기에는 카본(Carbon)이나 클래식(Classic)에 있는 전통적인 도구모음이 더 좋다. 그렇지만 미래는 밝다. 파이썬 개발을 위해 꼭 맥(Mac)을 사야 할 이유도 없지만, 파이썬인의 강렬한 욕망을 억누르는 것도 역시 없다. 언젠가 여러분이 일군 개척지 바로 그곳에서 명예와 부를 요구하게 될지도 모르는 일이다.
TAG :
댓글 입력
자료실

최근 본 상품0