◈ 지은이의 말 ◈
이 책은 파이썬 프로그래밍 언어의 여러 고급 기능을 소개하는 책이다. 목표는 최대한 높은 품질의 파이썬 프로그램을 개발하는 것이다. 이렇게 하려면 여러 디자인 대안을 찾아 어떤 디자인이 풀고 있는 문제에 가장 적합하며 성능이 좋은지 알아야 한다.
대부분의 내용은 주어진 디자인의 대안을 살펴보는 일로 구성돼 있다. 어떤 대안은 성능이 더 뛰어나고, 또 어떤 대안은 더 단순하거나 문제 도메인에 더 적합하다. 컴퓨터 프로세싱을 최소화하며 최대한 많은 가치를 내는 가장 좋은 알고리듬과 최선의 데이터 구조를 찾아야 한다. 다시 말해 시간이 곧 돈이고, 시간을 아껴주는 프로그램이 사용자에게 더 많은 가치를 창출한다. 파이썬은 애플리케이션 프로그램이 파이썬의 여러 내부 기능을 바로 사용할 수 있도록 돕는다. 즉, 프로그램을 기존 파이썬 요소와 밀접하게 통합시켜준다. 수많은 파이썬 요소를 활용하면 사용자의 객체지향 디자인과 매끄럽게 통합시킬 수 있다.
다양한 알고리듬과 데이터 구조를 살펴보며 메모리와 성능 대안들을 알아보자. 최종 애플리케이션을 올바르게 최적화하려면 여러 가지 솔루션을 제대로 검토할 수 있는 객체지향 디자인 실력이 필수다. 이 책이 전하고자 하는 가장 중요한 메시지는 어떤 문제든 유일한 정답은 없다는 것이다.
예제에서 최대한 완전한 타입 힌트를 제공하고자 노력했다. 표준 라이브러리가 아닌 외부 패키지를 이용하는 일부 예제는 타입 힌트가 없거나 불완전하다. 타입이 일관되게 쓰였는지 알려면 mypy 도구로 예제를 검사해야 한다.
객체지향 파이썬을 정복하기 위해 긴 시간을 투자해 다양한 소스의 파이썬 코드를 살펴본다. 심지어 파이썬 표준 라이브러리 모듈조차 광범위한 다양성을 지니기 때문에, 예제를 완벽히 일관되게 표현하는 대신 일부러 약간의 불일치를 택했다. 일관성이 부족한 코드를 읽어보는 것도 실제로 다양한 오픈소스 프로젝트의 코드를 읽을 때 도움이 될 것이다.
◈ 지은이 소개 ◈
스티븐 로트(Steven F. Lott)
컴퓨터가 거대하고 값비싸고 귀했던 1970년대에 프로그래밍을 시작했다. 계약직 소프트웨어 개발자이자 설계자로서 크고 작은 수백여 건의 프로젝트에 참여해왔다. 10년 넘게 파이썬을 사용해 비즈니스 문제를 해결 중이다. 팩트출판사에서 『유쾌한 파이썬』(에이콘, 2015), 『Python for Secret Agents II』(2015), 『Python Essentials』(2015), 『Functional Python Programming, 3/e』(2022), 『객체지향 파이썬 프로그래밍』(에이콘, 2017) 등을 출간했다. 현재 미국 동부 해안을 돌아다니며 업계에 머물고 있다.
◈ 옮긴이의 말 ◈
훌륭한 애플리케이션은 훌륭한 디자인으로부터 시작된다. 하나의 예술 작품처럼 개발도 뼈대를 세우고 살을 붙여 가는 과정을 거친다. 개발자가 첫 번째로 해야 할 일은 여러 디자인 대안을 수립하고 그중 무엇이 더 나은지 평가하는 것이다. 이 단계를 생략하면 허점투성이에다 손대기도 어려운 결과물이 나온다.
이 책은 강력한 파이썬 프로그램을 개발하는 데 꼭 필요한 객체지향 디자인 패턴을 소개한다. 파이썬이 제공하는 다양한 객체지향 요소를 적재적소에 활용하도록 돕고, 디자인 대안 간 성능도 비교해 본다. 어떤 문제를 해결하느냐에 따라 올바른 디자인의 정의도 달라지므로 문제에 적합한 디자인을 어떻게 가려내는지도 알려준다.
1부에서는 객체지향 프로그래밍 기법을 비롯해 스페셜 메서드로 파이썬 내장 클래스를 활용하는 방법을 다룬다. 초기화, 속성, 추상 기반 클래스, 컨텍스트, 컨테이너, 수, 장식자 등 파이썬의 기본적인 객체지향 요소를 하나씩 설명한다. 2부에서는 저장소에 객체를 지속시키는 방법을 다룬다. JSON, shelve, ORM 등으로 파일이나 데이터베이스에 다양한 형태의 객체를 지속시켜본다. 3부에서는 객체지향 방식으로 테스트하고 디버깅하는 방법을 소개하고 SOLID 디자인 원칙을 살펴본다.
1판과 달라진 점은 크게 두 가지다. 첫째, 전반적으로 예제가 더 풍부하고 자연스러워 실전에 활용하기 쉬워졌다. 둘째, SOLID 디자인을 소개하는 15장 ‘디자인 원칙과 패턴’ 장이 새롭게 추가됐다. 좋은 디자인을 고르려면 항상 정해진 디자인 원칙을 고수해야 한다는 점에서 1판을 읽었더라도 한 번쯤 들여다볼 만하다.
이 책은 디자인 패턴을 다루는 책도, 그렇다고 객체지향 프로그래밍을 다루는 책도 아니다. 그보다 활용이나 응용, 심화와 같은 단어가 어울린다. 평범한 프로그래머에서 탁월한 프로그래머로 거듭나고 싶은 열정적인 개발자에게 좋은 디딤돌이 돼 줄 것이다.
◈ 옮긴이 소개 ◈
심지현
이화여대 컴퓨터공학과를 졸업하고, 카이스트KAIST 대학원 전산과에서 데이터베이스 전공으로 석사 학위를 취득했다. DB 외에 온톨로지, 개인화 검색 등을 연구했으며, 졸업 후 네이버에서 검색 서버 설계 및 개발 실무 경험을 쌓다가 현재는 검색 연구실에서 검색 모델링과 추천 시스템 관련 연구 중이다.