더 나아가기

지금까지 이 책의 내용을 빠짐 없이 읽고 여러 프로그램을 작성하는 연습을 해봤다면 이제 파이썬이 어렵지 않고 친숙해졌을 것입니다. 아마 파이썬 프로그램을 만들어서 갖가지 실험도 해보고 파이썬 실력도 쌓았을 것입니다. 만약 그렇게 하지 않았다면 그렇게 해야 합니다. 이제 문제는 '그다음으로 무엇을 배워야 하느냐?'일 것입니다.

저는 다음과 같은 문제를 해결해보기를 제안합니다.

친구, 가족, 동료와 같은 사람들과 그들의 이메일 주소 및 전화번호 같은 정보를 조회, 추가, 수정, 삭제, 검색할 수 있는 명령줄 기반의 주소록 프로그램을 직접 만들어 보세요. 상세 내용은 나중에 검색할 수 있게 저장해야 합니다.

이 문제는 지금까지 배운 다양한 내용 측면에서 생각해 본다면 꽤나 쉽습니다. 그럼에도 어떻게 진행해야 할지 갈피를 잡지 못하겠다면 힌트를 하나 드리겠습니다.1

이 프로그램을 작성할 수 있다면 스스로를 파이썬 프로그래머라고 자부해도 됩니다. 이제 이처럼 훌륭한 책을 쓴 저에게 감사의 이메일을 보내주세요 ;-). 선택은 자유지만 그렇게 해주시길 바랍니다. 또한 이 책을 계속 발전시킬 수 있도록 종이책 구입도 고려해 보세요.

앞의 프로그램이 쉽게 느껴졌다면 이번에는 다른 프로그램을 제안합니다.

replace 명령어를 구현해 보세요. 이 명령어는 지정한 파일 리스트의 각 파일에서 한 문자열을 다른 문자열로 대체합니다.

replace 명령어는 단순 문자열 치환에서 패턴 찾기(정규 표현식)까지 간단할 수도 있고 복잡할 수도 있습니다.

다음 프로젝트

앞의 프로그램도 어렵지 않게 느껴졌다면 다음과 같은 폭넓은 프로젝트 목록을 보고 직접 프로그램을 작성해 보길 바랍니다: https://github.com/thekarangoel/Projects#numbers (같은 목록을 Martyr2's Mega Project List에서도 확인할 수 있습니다).

다음 내용도 참고하세요.

예제 코드

프로그래밍 언어를 배우는 가장 좋은 방법은 많은 코드를 작성하고 읽어보는 것입니다.

조언

동영상

질문과 답변

자습서

토론

파이썬 문제에 막혀서 누구에게 물어봐야 할지 모르겠다면 python-tutor list는 질문을 던지기에 가장 좋은 곳입니다.

먼저 문제를 직접 해결하려고 노력함으로써 과제를 해보고 나서 더 적절한 질문을 던지세요.

새소식

파이썬 세계의 최신 정보가 궁금하다면 Official Python Planet을 참고하세요.

라이브러리 설치

Python Package Index에는 프로그램에서 이용할 수 있는 방대한 양의 오픈소스 라이브러리가 있습니다.

이러한 라이브러리를 설치해서 사용하고 싶다면 pip를 이용하면 됩니다.

웹 사이트 제작

직접 웹사이트를 제작하고 싶다면 Flask를 배우세요. 다음은 몇 가지 참고자료입니다.

그래픽 소프트웨어

파이썬을 이용해 직접 그래픽 프로그램을 제작하고 싶다고 해봅시다. 이 경우 파이썬 바인딩을 지원하는 GUI(Graphical User Interface) 라이브러리를 이용하면 됩니다. 바인딩이란 파이썬으로 프로그램을 작성하고 C나 C++ 또는 다른 언어로 작성된 라이브러리를 사용할 수 있게 해주는 것입니다.

파이썬을 이용해 GUI를 제작하는 데 사용할 수 있는 것이 많습니다.

  • Kivy

  • PyGTK

    • GNOME의 기반이 되는 GTK+ 툴킷에 대한 파이썬 바인딩입니다. GTK+는 사용법이 까다롭지만 한번 익숙해지면 GUI 앱을 빠르게 제작할 수 있습니다. Glade 그래픽 인터페이스 디자이너는 필수 요소입니다. 문서는 아직까지 개선의 여지가 있습니다. GTK+는 GNU/리눅스에서도 잘 동작하지만 윈도우 포팅은 아직 완전하지 않습니다. GTK+를 이용해 자유 소프트웨어나 독점 소프트웨어를 모두 제작할 수 있습니다. GTK+ 학습을 시작하려면 PyGTK tutorial을 읽어보기 바랍니다.
  • PyQt

    • KDE의 기반이 되는 Qt 툴킷의 파이썬 바인딩입니다. Qt는 특히 Qt 디자이너 및 문서화가 아주 잘 돼 있어서 사용하기가 굉장히 쉽고 매우 강력합니다. 오픈소스(GPL) 소프트웨어를 제작할 경우 PyQt는 무료이며, 독점적인 사유 소프트웨어를 만들고 싶을 경우 라이선스를 구입할 필요가 있습니다. Qt 4.5로 시작할 경우 비GPL 소프트웨어를 제작하는 데도 이용할 수 있습니다. PyQt 학습을 시작하려면 PySide를 읽어보기 바랍니다.
  • wxPython

    • wxWidgets 툴킷에 대한 파이썬 바인딩입니다. wxPython은 다소 학습 곡선이 있습니다. 하지만 이식성이 매우 높고 GNU/리눅스, 윈도우, macOS, 심지어 임베디드 플랫폼에서도 동작합니다. SPE (Stani's Python Editor)wxGlade GUI 빌더 같은 GUI 디자이너를 비롯해 wxPython를 지원하는 IDE가 많습니다. wxPython를 이용하면 독점 소프트웨어 또한 자유롭게 제작할 수 있습니다. wxPython 학습을 시작하려면 wxPython tutorial을 읽어보기 바랍니다.

GUI 도구 정리

선택의 폭을 넓히기 위해서는 GuiProgramming wiki page at the official python website를 참고합니다.

아쉽게도 파이썬에는 표준으로 정해진 GUI 도구가 없습니다. 그래서 저는 각자의 상황에 따라 앞에서 소개한 도구 중 하나를 선택하길 제안합니다. 선택 시 고려할 첫 번째 요인은 GUI 도구를 사용하는 데 돈을 지불할 의사가 있느냐입니다. 두 번째 요인은 프로그램이 윈도우나 macOS, 또는 GNU/리눅스에서만 동작하거나 아니면 모든 플랫폼에서 실행되길 원하느냐입니다. 세 번째 요인은 만약 GNU/리눅스를 대상 플랫폼으로 선택할 경우 GNU/리눅스에서 KDE 또는 GNOME 중 무엇을 사용하느냐입니다.

더 자세하고 포괄적인 분석이 필요하다면 'The Python Papers, Volume 3, Issue 1' (PDF)의 26쪽을 참고합니다.

다양한 구현체

보통 프로그래밍 언어는 언어와 소프트웨어라는 두 가지 부분으로 구성됩니다. 언어는 무언가를 작성하는 방법을 나타냅니다. 소프트웨어는 프로그램을 실제로 실행하는 실체입니다.

지금까지는 프로그램을 실행하는 데 CPython 소프트웨어를 이용했습니다. CPython이라고 부르는 이유는 C 언어로 작성되고 전통적인 파이썬 인터프리터(Classical Python interpreter)이기 때문입니다.

파이썬 프로그램을 실행할 수 있는 다른 소프트웨어도 있습니다.

  • Jython

    • 자바 플랫폼에서 동작하는 파이썬 구현체입니다. 이는 파이썬 언어 내에서 자바 라이브러리와 클래스를 이용할 수 있다는 뜻입니다(그 반대도 마찬가지).
  • IronPython

    • .NET 플랫폼에서 동작하는 파이썬 구현체입니다. 이는 파이썬 언어 내에서 .NET 라이브러리와 클래스를 이용할 수 있다는 뜻입니다(그 반대도 마찬가지).
  • PyPy

    • 파이썬으로 작성된 파이썬 구현체입니다! 인터프리터 자체가 동적 언어(앞의 세 구현체인 C, 자바, C# 같은 정적 언어와 반대되는)로 작성돼 있기 때문에 이것은 인터프리터를 빠르고 개선하기 쉽게 만들기 위한 연구 프로젝트입니다.

Common Lisp으로 작성된 파이썬 구현체인 CLPython이나 자바스크립트 인터프리터를 기반으로 하는 구현체인 Brython 같은 것도 있습니다. Brython의 경우 파이썬(자바스크립트 대신)을 이용해 웹 브라우저용 프로그램("Ajax")을 작성할 수 있다는 의미도 됩니다.

이러한 구현체 각각은 저마다 유용한 전문 영역이 있습니다.

함수형 프로그래밍(고급 독자 한정)

규모가 큰 프로그램을 작성하기 시작하면 분명 객체지향 프로그램 장에서 배운 프로그래밍에 대한 클래스 기반 접근법과는 대조적인 함수형 접근법을 좀 더 배워야 할 것입니다.

정리

이제 이 책의 끝에 다다랐지만 흔히 말하듯 이것은 대단원의 시작이기도 합니다! 이제 여려분은 열렬한 파이썬 사용자이고 분명 파이썬을 이용해 문제를 해결할 준비가 됐을 것입니다. 종전에는 상상할 수조차 없었던 온갖 종류의 일들을 수행하도록 컴퓨터를 자동화하거나 여러분만의 게임을 제작하는 등의 일들을 시작할 수 있습니다. 그럼 시작해 봅시다!


1. 연락처 정보를 표현하는 클래스를 만듭니다. 딕셔너리를 이용해 연락처의 이름을 키로 삼아 사람 객체를 저장합니다. pickle 모듈을 이용해 객체를 하드디스크에 영구적으로 저장합니다. 딕셔너리에 내장된 메서드를 이용해 연락처의 정보를 추가, 삭제, 수정합니다.