남은 과제
지금까지 이 책의 내용을 잘 따라오신 분들이라면 아마 많은 파이썬 프로그램을 작성해 보는 연습을 해 보셨을 것이고, 파이썬이 더 편안해지고 친숙해졌을 것입니다. 또 이 책의 예제 프로그램 이외에 이것저것 다른 것들도 시도해 보신 분들도 계시겠죠. 혹시 아니시라면, 지금이라도 그렇게 하셔야 합니다. 자, 이제 남은 질문은 하나입니다. '앞으로 무엇을 하면 좋을까요?'
아래 문제를 한번 해결해 보시기 바랍니다:
명령줄에서 실행되는 주소록 프로그램을 만들어 보세요. 여기에는 친구, 가족, 동료 등을 카테고리별로 나눠 저장해 두며, 또 항목을 검색하거나 새로 추가 혹은 삭제할 수 있고 각 사람의 메일 주소, 전화번호 등의 정보를 담을 수 있도록 하세요. 또한 이러한 정보들을 저장해 두었다가 언제든 불러와 사용할 수 있게 하세요.
지금까지 살펴본 다양한 내용들을 다시 되짚어 보면 위 문제 정도는 쉽게 해결할 수 있을 것입니다. 힌트를 원하신다면 아래 꼬리말을 참조하세요 1.
위 문제를 성공적으로 해결하셨다면, 여러분은 이제 한 사람의 파이썬 프로그래머라고 불리기에 아무 손색이 없을 것입니다. 이제 저에게 이런 좋은 책을 써서 고맙다는 메일 한 통을 보내 주세요 ;-). 또, 이 책의 지속적인 발전을 위해 책을 구입하시는 것도 고려해 주세요.
위 문제가 너무 쉬웠다면, 아래 문제도 해결해 보시기 바랍니다:
replace 명령을 직접 구현해 보세요. 이 명령은 주어진 파일들 내부의 모든 특정 문자열을 다른 문자열로 치환하는 데 사용됩니다.
여러분의 취향에 따라 구현은 단순히 문자열을 치환해 주는 식으로 구현될 수도 있고 패턴 검색 (정규 표현식)을 통해 좀 더 유연하게 구현될 수도 있습니다.
더 많은 과제
위 문제들이 너무 쉬웠다면, 다음 사이트에 주어진 과제들을 프로그램으로 구현해 보시기 바랍니다: https://github.com/thekarangoel/Projects#numbers (또는 Martyr2의 Mega Project List)
또 다음을 확인해 보세요:
- 프로그래머가 되기 위한 연습: 코딩 스킬을 기르기 위한 57가지 도전과제 (Exercises for Programmers: 57 Challenges to Develop Your Coding Skills)
- 파이썬 중급 프로젝트 (Intermediate Python Projects).
예제 코드 읽기
프로그래밍 언어를 배우는 가장 좋은 방법은 코드를 직접 많이 써보고 또 많이 읽는 것입니다:
- Python Cookbook 은 파이썬을 이용하여 어떤 문제를 해결할 때 유용한 해결 방법과 팁을 정리해 놓은 굉장히 좋은 사이트입니다. 파이썬 사용자라면 반드시 한 번쯤 읽어 볼 필요가 있습니다.
- Python Module of the Week 또한 한 번쯤 읽어 봐야 할 매우 잘 쓰인 표준 라이브러리 가이드입니다.
참고 문서
- 파이썬을 여행하는 히치하이커를 위한 안내서(The Hitchhiker’s Guide to Python!)
- 파이썬 스타일의 기본요소 (The Elements of Python Style)
- 파이썬의 큰 그림(Python Big Picture)
- 전자책 "Writing Idiomatic Python" (유료)
파이썬 관련 영상
질문과 답변
- Official Python Dos and Don'ts
- Official Python FAQ
- Norvig's list of Infrequently Asked Questions
- Python Interview Q & A
- StackOverflow questions tagged with python
튜토리얼
- Hidden features of Python
- What's the one code snippet/python trick/etc did you wish you knew when you learned python?
- Awaretek's comprehensive list of Python tutorials
커뮤니티
파이썬을 사용하다가 도저히 해결하지 못할 문제에 직면한 경우, python-tutor list (영문) 혹은 Python Korea 페이스북 그룹 (한글) 에 질문하시면 좋습니다.
질문하기 전에 먼저 직접 문제를 해결하려고 노력해 보신 후에 질문하시기 바라며, 다음을 읽어 보시기 바랍니다: 좋은 질문을 하는 방법(영문).
새로운 소식
파이썬 세계에서 벌어지고 있는 최신 정보들을 접하고 싶으시면 공식 Python Planet 사이트 (영문) 를 확인하세요.
라이브러리 설치하기
파이썬 패키지 인덱스 (Python Package Index, PyPI) 에 여러분의 프로그램에서 사용할 수 있는 수많은 오픈 소스 라이브러리가 존재합니다.
pip를 활용하면 이 라이브러리들을 쉽게 설치하고 사용할 수 있습니다.
홈페이지 제작
플라스크(Flask) 를 이용하여 홈페이지를 만들 수 있습니다. 다음을 읽어 보세요:
GUI 프로그램 만들기
파이썬 바인딩을 제공하는 여러 GUI(Graphical User Interface) 라이브러리를 사용하여 GUI 프로그램을 제작할 수 있습니다. 바인딩이란 C, C++ 혹은 다른 언어로 제작된 라이브러리를 파이썬에서 불러와 사용할 수 있도록 하는 일종의 연결 모듈을 말합니다.
다음은 파이썬에서 사용할 수 있는 GUI 라이브러리 목록입니다:
Kivy
PyGTK
- 이것은 GNOME을 제작할 때 사용된 GTK+ 의 파이썬 바인딩입니다. GTK+은 처음에는 사용하기 불편할 수 있지만 한번 익숙해지면 GUI 프로그램을 빠르게 제작할 수 있게 됩니다. 이때 Glade라는 디자인 도구를 많이 사용합니다. GTK+ 를 사용하여 자유/독점 소프트웨어를 모두 작성할 수 있습니다. PyGTK를 사용하시려면 PyGTK 튜토리얼을 읽어 보세요.
PyQt
- 이것은 KDE을 제작할 때 사용된 Qt의 파이썬 바인딩입니다. Qt는 Qt Designer라는 디자인 도구와 방대한 문서 덕택에 굉장히 사용이 쉽고 강력한 도구입니다. PyQt는 오픈 소스 (GPL 하에서) 소프트웨어를 작성하려고 할 때 무료로 사용할 수 있습니다만, 독점 소프트웨어를 작성하려고 할 때는 사용권을 구입하여야 합니다. 또 Qt 4.5부터는 GPL이 아닌 소프트웨어 또한 작성할 수 있습니다. PyQt를 사용하시려면 PySide 를 읽어 보세요.
wxPython
- 이것은 wxWidgets의 파이썬 바인딩입니다. wxPython은 조금 어렵기 때문에 익숙해 지기까지 조금 시간이 필요할 수 있습니다. 그러나, wxPython으로 작성된 프로그램은 GNU/Linux, Windows, Mac 등 여러 플랫폼을 지원하며 심지어 임베디드(embedded) 플랫폼에서도 사용이 가능합니다. 또한 SPE (Stani's Python Editor) 나 wxGlade 와 같은 IDE 혹은 GUI 디자인 도구들을 사용할 수 있습니다. wxPython을 이용하여 독점 소프트웨어 또한 자유롭게 작성이 가능합니다. wxPython을 사용하시려면 wxPython 튜토리얼을 읽어 보세요.
그 외의 GUI 저작 도구들
그 외의 다른 도구들에 대해서는 파이썬 공식 사이트의 GuiProgramming 위키 페이지를 참조하세요.
지금까지는 파이썬을 위한 "표준" GUI 저작 도구는 없습니다. 따라서, 위 목록에서 여러분의 상황에 맞는 도구를 하나 골라 사용하시는 것을 추천합니다. 아마 첫 번째 고려해야 할 점은 여러분이 선택한 GUI 저작 도구를 구입할지 여부일 것이고, 두 번째 고려해야 할 점은 여러분의 프로그램이 윈도우 환경이나 맥, 리눅스 중 하나에서만 동작해도 되는지 아니면 모든 환경에서 잘 동작해야 하는지를 결정해야 할 것입니다. 이때 여러분이 리눅스 환경을 선택했다면 여러분이 KDE를 사용하는지 GNOME을 사용하는지도 고려 대상이 될 것입니다.
이에 대한 좀 더 상세하고 포괄적인 분석을 원하신다면, 'The Python Papers, Volume 3, Issue 1' (PDF) 의 26페이지를 참조하시기 바랍니다.
다양한 파이썬 구현들
프로그래밍 언어는 크게 두 부분으로 나뉘는데, 그 하나는 언어이고 또 하나는 소프트웨어입니다. 여기서 언어란 어떻게 프로그램을 작성하는지 정의해 둔 것을 말하며, 소프트웨어란 무엇이 실제로 이렇게 작성된 프로그램을 실행시키는지를 말합니다.
지금까지 우리는 여러분이 작성한 프로그램을 실행시키기 위해 CPython 이라는 소프트웨어를 사용해 왔습니다. 이것은 C 언어로 작성되었기 때문에 CPython이라고 하며, 이는 가장 기본적인 파이썬 인터프리터 입니다.
그렇지만, 우리가 작성한 파이썬 프로그램을 실행할 수 있는 다양한 다른 소프트웨어들도 존재합니다:
-
- 이것은 자바 플랫폼상에서 동작하는 파이썬 구현입니다. 이를 이용하면 파이썬 언어 안에서 자바 라이브러리 및 클래스를 불러와 사용할 수 있으며, 그 반대도 가능합니다.
-
- 이것은 .NET 플랫폼상에서 동작하는 파이썬 구현입니다. 이를 이용하면 파이썬 언어 안에서 .NET 라이브러리 및 클래스를 불러와 사용할 수 있으며, 그 반대도 가능합니다.
-
- PyPy는 파이썬으로 작성된 파이썬 구현입니다! 이것은 C, Java, C# 등과 같은 정적인 언어를 배제한 동적 언어로 구현된 인터프리터가 어디까지 빨라질 수 있으며 또 얼마나 쉽게 구현할 수 있는지 확인해보려는 연구 프로젝트입니다.
이외에도 CLPython 이라는 Common Lisp로 작성된 파이썬 구현이 있습니다. 또 자바스크립트 인터프리터 상에서 동작하는 Brython 이 있는데, 이를 이용하면 자바스크립트 대신 파이썬을 이용하여 웹 브라우저상에서 동작하는 Ajax 프로그램을 제작할 수도 있습니다.
이러한 각각의 파이썬 구현은 각 분야에서 유용하게 사용됩니다.
(고급 프로그래머를 위한) 함수형 프로그래밍
여러분이 큰 프로그램을 제작해야 할 경우, 앞서 객체 지향 프로그래밍 챕터에서 배웠던 클래스에 기반한 객체 지향적 프로그래밍 대신 함수형 프로그래밍 방법에 대해서도 한 번쯤 배워 볼 필요가 있습니다:
- Functional Programming Howto by A.M. Kuchling
- Functional programming chapter in 'Dive Into Python' book
- Functional Programming with Python presentation
- Funcy library
- PyToolz library
요약
이제 여러분은 이 책의 마지막에 다다랐습니다. 그러나, 이것은 또 다른 시작일 뿐입니다! 여러분은 이제 열의에 가득 찬 한 명의 파이썬 프로그래머이고, 파이썬을 활용해 더 많은 문제를 해결할 준비가 되어 있을 것입니다. 이전에는 생각하지 못했던 여러 자동화 스크립트를 작성해 보거나, 직접 게임을 만들어 보는 등 여러 가지 시도를 해 보기 바랍니다. 자, 이제 시작해 봅시다!
1. 각 사람의 정보를 담는 클래스를 하나 만드세요. 그리고 각 사람의 이름을 키로 하고 사람의 객체를 값으로 하는 사전에 데이터를 저장해 둡니다. 그리고 pickle 모듈을 사용하여 이 객체를 여러분의 하드 디스크에 저장해 두세요. 또 사전의 내장 메소드를 활용하여 사람을 추가하고 삭제하거나 수정하는 기능을 구현하세요. ↩