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

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

파이썬과 C++의 결합

한빛미디어

|

2001-07-26

|

by HANBIT

13,051

by 한빛 리포터 1기 이호재 파이썬과 C++는 쉽게 서로의 취약점을 보완해 준다. 파이썬은 빠른 개발과 유연성을 제공하며, C++는 속도가 빠르며 기존의 툴을 사용할 수 있는 장점이 있다. 파이썬을 C++로 확장해주는 표준 툴이 없지만, GUI 툴킷 등 C++ 라이브러리로의 파이썬 랩퍼(wrapper)가 있다. 이러한 인터페이스를 개발하는 개발자는 우리에게 래핑 뿐 아니라 래퍼도 제공한다. 래퍼는 C++ 객체를 파이썬에서 사용할 수 있도록 인터페이스를 제공한다. Sip과 SWIG는 많은 코드를 추가로 작성하지 않고 자동으로 인터페이스를 만드는 데 사용한다. SWIG는 주로 C 코드와 함께 이용한다. Sip은 C++ 코드에 초점을 맞춘 SWIG의 파생 프로그램이다. Sip은 theKompany에서 Qt GUI 툴킷과 K Desktop 환경으로의 파이썬 인터페이스를 만드는 데 이용하기 위해 개발되었다. 자동 생성이 좋을 것 같지만, 완전히 자동적으로 되지는 않는다. 복잡한 프로그램과 결과물을 조정하기 위해서는 코드를 작성해야 한다. 확장(extension)을 만드는 일부 작업에서는 수동으로 작성하는 것이 낫다. Paul DeBois의 CXX를 사용하면 파이썬을 위한 C++ 확장을 더 쉽게 작성할 수 있다. 이는 본질적으로 파이썬 C API의 C++ 버전이다. CXX 레퍼런스 카운터를 조정하고 예외를 변환한다. 이는 C++ 확장을 어렵게 하는 대부분의 타입 체킹(type checking)과 클린업(cleanup)을 줄여서, 작성하고 있는 코드의 중요한 부분에 집중할 수 있도록 해준다. 이는 C++ STL(Standard Template Library)를 파이썬 리스트나 튜플로 사용할 수 있게 해준다. 아마도 이러한 점이 톰 말콤슨(Tom Malcolmson)이 파이썬에서 STL을 사용하게 하는 PySTL을 만들도록 고무시켰을 것이다. CXX의 수정된 버전을 이용해서 말콤슨은 STL 컨테이너와 알고리즘이 쉽게 파이썬에 접근할 수 있도록 하는 작업을 시작했다. 대부분의 STL이 핵심 파이썬 기능과 중복되지만, STL이 더 빠르다. PySTL을 이용해 일부 함수의 속도를 높일 수 있지만, 속도를 위해 이식성을 약간 포기해야 한다. 또한 PySTL은 파이썬에서 STL을 대화식(interactive)으로 관찰할 수 있어 교육용으로 사용될 수도 있다. 이 프로젝트는 아직 초기 단계이며 말콤슨이 윈도우 개발자이기 때문에 리눅스나 유닉스에서는 최소한의 기능만이 제공된다. 그는 유닉스 시스템을 위해 설정 스크립트와 makefile을 소스코드와 함께 제공하고 있지만, 레드햇(RedHat) 7.1 시스템에서 컴파일이 되지 않았다. 윈도우즈 사용자를 위한 바이너리 버전도 있다. PySTL의 교육적인 면이 필자에게 STL에 대한 충분한 호기심을 이끌었기 때문에 필자는 좀더 많은 STL 정보를 찾기 시작했다. 최근의 잭 커맨(Jak Kirman)의 웹 페이지에서 훌륭한 STL 튜토리얼을 찾았다. 파이썬 프로그래머들에게 그는 Perl/Python Phrasebook으로 유명하다. 커맨이 작년말에 갑자기 사망했기 때문에, 브라운 대학(Brown University)에서 그의 웹 페이지를 계속 호스팅할 지 알 수 없다. 그러므로 그의 웹 페이지를 볼 수 있을 때 서핑해 보는 것이 좋다. 마지막으로 데이빗 아브라함즈(David Abrahams)의 Boost.Python이라는 툴을 언급하겠다. Boost.Python을 가지고 파이썬 프로그램에서 임포트(import)한 다음 이용할 수 있는 공유 라이브러리를 만들기 위해 작은 양의 코드만을 작성하면 된다. Sip과 마찬가지로 새로운 확장을 만드는 것뿐만 아니라 기존의 코드를 이용하도록 디자인됐다. CXX처럼 이것은 레퍼런스, 콜백, 타입체킹(typechecking)과 클린업(cleanup)을 다룬다. 긴 코드를 위한 인터페이스를 작성하는 것이 지루하겠지만, 자동화된 래핑 툴을 이용하는 것보다 더 많은 조절을 할 수 있고 프로세스가 간단하다. 현재 아브라함즈는 여기서 언급하지 않은 툴을 비교한 페이지를 비롯해 완전한 Boost.Python 문서를 작성하였다. 이러한 툴이 있기 때문에 우리는 파이썬과 C++중 어느 하나만을 선택하지 않아도 된다. 어느 하나를 가지고 시작해서 이를 토대로 다른 것을 배우면 되기 때문이다. 두 가지 모두를 안다면 각 언어의 힘을 이용할 수 있고, 하이브리드 프로젝트로 하나의 언어만을 가지고 할 수 있는 것보다 더 많은 것을 더 빠르게 이룰 수 있다.
스티븐 피긴즈(Stephen Figgins)는 오라일리 네트워크의 편집자이며 파이썬 데브센터 지부장이다. 이호재님은 한빛 리포터 1기로 활동 중입니다. 카드코리아 개발 실장으로 근무한 경험이 있으며, 지금은 서울대 지구환경시스템공학부(컴퓨터 공학)에 다니고 있습니다. 컴퓨터에 관련된 모든 분야에 두루 관심이 많으며, 요즈음엔 파이썬, MPI, PHP 등에 관심이 많다고 합니다.
TAG :
댓글 입력
자료실

최근 본 상품0