Top

클린 파이썬 [효과적인 파이썬 코딩 기법]

  • 원서명Clean Python: Elegant Coding in Python (ISBN 9781484248775)
  • 지은이수닐 카필(Sunil Kapil)
  • 옮긴이유연재
  • ISBN : 9791161755113
  • 22,000원
  • 2021년 04월 16일 펴냄
  • 페이퍼백 | 276쪽 | 188*235mm
  • 시리즈 : 프로그래밍 언어

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/clean-python

요약

파이썬을 더 나은 방법으로 코딩할 수 있도록 팁과 방법을 알려주는 지침서다. 파이썬의 내장 데이터 구조, 함수와 클래스, 딕셔너리, 모듈 및 메타 클래스, 데코레이터와 컨텍스트 매니저, 제너레이터와 이터레이터, 비동기 프로그래밍 등을 다룬다. 또한 파이썬 코드를 위한 디버깅과 테스트 방법을 알아보고, 다양한 파이썬 도구를 살펴볼 것이다.

이 책에서 다루는 내용

■ 파이썬 코드의 올바른 표현과 구문
■ 파이썬 딕셔너리의 생성과 할당
■ 파이썬에서의 고급 데이터 구조 작업
■ 더 나은 모듈, 클래스, 함수, 메타 클래스 작성
■ 비동기 파이썬 작성
■ 파이썬의 새로운 기능

저자/역자 소개

지은이의 말

파이썬은 오늘날 가장 인기 있는 언어 중 하나다. 웹 개발, 과학 연구와 같은 전통적인 분야 외에 데이터 과학, AI, 로봇공학, 데이터 분석과 같은 비교적 새로운 분야에서도 파이썬을 사용하고 있다. 파이썬과 같은 동적 언어로 코드를 작성하는 프로그래머는 코드의 품질이 높고 오류가 없는지 확인하는 것이 점점 더 중요해지고 있다. 파이썬 개발자는 개발 중인 소프트웨어가 예산을 초과하거나 릴리스(release)하지 않고도 사용자를 만족시킬 수 있는지 확인하려 한다. 파이썬은 단순한 언어지만, 더 나은 파이썬 코드를 작성하는 방법을 가르치는 리소스(resource)가 많지 않으므로 파이썬으로 훌륭한 코드를 작성하기는 어렵다. 현재 파이썬 세계에서는 코드 일관성(code consistency), 패턴, 좋은 파이썬 코드에 대한 개발자 간의 공통적인 이해가 부족하다. 모든 파이썬 프로그래머에게서 훌륭한 파이썬 코드는 각기 다른 의미를 가진다. 파이썬이 너무 많은 분야에서 사용되고 있으므로 개발자들 사이에서 특정 패턴에 대한 합의를 이끌어내기가 어렵기 때문이다. 게다가 파이썬은 자바(Java)나 루비(Ruby)와 달리 ‘클린 코드(clean code)’에 관한 책이 존재하지도 않는다. 훌륭한 파이썬 사례를 명확하게 보여주고자 이런 종류의 책을 작성하려는 시도가 있었지만, 시도 자체도 그다지 많지 않았고 솔직히 말해 품질 자체도 만족스럽지 않았다. 이 책의 주목적은 다양한 수준의 파이썬 개발자에게 더 나은 파이썬 소프트웨어와 프로그램을 작성할 수 있는 팁을 제공하는 것이다. 이 책은 파이썬을 사용하는 분야에 관계없이 다양한 기술을 제공한다. 기본에서 고급까지 모든 수준의 파이썬을 다루며 좀 더 파이써닉(Pythonic)하게 코드를 작성하는 법을 소개한다.

지은이 소개

수닐 카필(Sunil Kapil)

지난 10년 동안 파이썬을 비롯한 여러 언어로 프로덕션 코드(production code)를 작성한 소프트웨어 전문가다. 주로 웹과 모바일 서비스의 백엔드(backend)에서 소프트웨어 엔지니어로 근무했다. 수백만 명의 사용자에게 사랑받고 이용되는 소규모 및 대규모 운영 프로젝트를 개발하고 배포하며 유지한다. 전 세계 유명 소프트웨어 회사의 다양하고 전문적인 환경에서 여러 팀과 그 프로젝트들을 완료했다. 오픈소스의 열정적인 지지자로서 줄립 챗(Zulip Chat), 블랙(Black) 같은 프로젝트에 지속적으로 기여하고 있을 뿐 아니라 비영리 단체와 협력해 소프트웨어 프로젝트에서 자원봉사를 하기도 한다. 다양한 밋업(meetup)과 콘퍼런스에서 많은 발표를 해왔으며 소프트웨어 엔지니어링, 도구, 기술에 대한 웹 사이트를 운영한다. 또한 이메일과 소셜 미디어를 통해서도 많은 사람과 의견을 나누고 있다.

옮긴이의 말

파이썬은 가장 인기 있는 프로그래밍 언어 중 하나입니다. 문법이 복잡하지 않고 초보자도 쉽게 다룰 수 있으므로, 파이썬은 코딩을 처음 접하는 학생들부터 인공지능, 머신러닝 등을 다루는 개발자들까지 다양하게 사용되고 있습니다. 개발자 대부분은 파이썬이 처음 나왔을 때 지금과 같은 인기를 얻을 것이라고 상상하지 못했습니다. 저 역시 마찬가지였습니다. 현재 파이썬의 위상은 상상을 초월하고 있습니다. 대중적으로 많은 사랑을 받고 있으며, 파이썬 관련 프로그래밍 서적도 끊임없이 쏟아지고 있습니다. 또한 사용 가능한 공개 라이브러리도 다른 프로그래밍 언어보다 다양하므로 원하는 프로그램을 쉽게 작성할 수 있습니다. 그럼에도 저는 파이썬을 공부하면서 늘 한 가지 아쉬운 점이 있었습니다. 성능이 크게 떨어진다거나 코딩이 불편하다는 이야기도 아닙니다. 여러 프로그래밍 언어와 달리, 파이썬의 경우 효과적으로 코딩하는 방법에 대한 정보가 부족하다고 느껴졌습니다. 이 책은 더 나은 방법으로 파이썬 코드를 작성하는 것을 전제로 접근합니다. 파이썬의 파이써닉 코드 작성 방법을 시작으로, 올바른 표현과 내장 데이터 구조, 함수와 클래스, 딕셔너리를 활용한 모듈 및 메타클래스 등을 다룰 것입니다. 또한 데코레이터와 컨텍스트 매니저, 제너레이터와 이터레이터, 비동기 프로그래밍, 타입 힌트, 디버깅 방법과 테스트, 멋진 파이썬 도구도 살펴볼 것입니다.

옮긴이 소개

유연재

프로그램 개발과 관련한 모든 분야에 관심이 많다. 항상 부족한 것이 많다고 생각하며 노력하는 40대 프로그래머다. 현재는 보험의 디지털 혁신을 꿈꾸는 캐롯손해보험에서 일반보험 IT 개발을 담당하고 있다. 에이콘출판사에서 출간한 『자바 네트워크 프로그래밍』(2016), 『파이썬과 자연어 처리』(2017), 『파이썬과 비즈니스 자동화』(2018)를 번역했다.

목차

목차
  • 1장. 파이써닉으로 생각하기
    • 파이써닉 코드 작성
      • 네이밍
      • 코드 표현과 구문
      • 코드 작성을 위한 파이써닉 방법의 수용
    • 독스트링 사용
      • 모듈 레벨 독스트링
      • 클래스 독스트링 생성
      • 함수 독스트링
      • 유용한 독스트링 도구
    • 파이써닉 제어 구조 작성
      • 리스트 컴프리헨션 사용
      • 복잡한 리스트 컴프리헨션 생성 금지
      • 람다를 사용해야 하는가?
      • 제너레이터와 리스트 컴프리헨션을 사용해야 하는 경우
      • 루프와 함께 else를 사용하지 않는 이유
      • 파이썬 3의 range가 더 좋은 이유
    • 예외 발생
      • 자주 발생하는 예외
      • 예외 처리에서 finally의 장점
      • 나만의 예외 클래스 생성
      • 특정 예외 처리
      • 서드 파티 예외 주의
      • 최소한의 try 코드 선호
    • 요약

  • 2장. 데이터 구조
    • 공통 데이터 구조
      • 속도를 위한 집합 사용
      • 데이터 반환 및 액세스를 위한 네임드튜플 사용
      • str, 유니코드, 바이트의 이해
      • 리스트 사용 시 주의 사항과 제너레이터 선호
      • 리스트 처리를 위한 zip 사용
      • 파이썬의 내장 함수 활용
    • 딕셔너리의 장점
      • 딕셔너리와 다른 데이터 구조를 사용하는 시기
      • 컬렉션
      • OrderedDict, defaultdict, 일반 딕셔너리
      • 딕셔너리를 사용한 스위치 구문
      • 두 개의 딕셔너리를 병합하는 방법
      • 우아한 딕셔너리 출력
    • 요약

  • 3장. 더 나은 함수와 클래스 작성
    • 함수
      • 작은 함수 생성
      • 제너레이터 반환
      • None 반환 대신 예외 발생
      • 디폴트 및 키워드 인자를 사용한 행동 추가
      • 명시적인 None 반환 금지
      • 방어적인 함수 작성
      • 단일 표현식으로 람다 사용
    • 클래스
      • 클래스의 올바른 크기
      • 클래스 구조
      • @property를 사용하는 올바른 방법
      • 정적 메서드 사용 시기
      • 파이써닉 방법의 추상 클래스 상속 사용
      • 클래스 상태 액세스를 위한 @classmethod 사용
      • private 대신 public 속성 사용
    • 요약

  • 4장. 모듈 및 메타클래스 작업
    • 모듈과 메타클래스
    • 모듈이 코드를 구성하는 데 도움이 되는 방법
      • init 파일 활용
    • 모듈의 함수와 클래스를 임포트하는 올바른 방법
      • all 를 사용한 임포트 방지
    • 메타클래스를 사용하는 경우
    • 서브클래스 검증을 위한 new 사용
      • slots 가 유용한 이유
    • 메타클래스를 사용한 클래스 동작 변경
    • 파이썬 디스크립터 다루기
    • 요약

  • 5장. 데코레이터와 컨텍스트 매니저
    • 데코레이터
      • 데코레이터의 의미와 유용한 이유
      • 데코레이터의 이해
      • 데코레이터를 사용한 동작 수정
      • 다중 데코레이터 사용
      • 데코레이터 인자 허용
      • 데코레이터의 라이브러리 사용 시 고려 사항
      • 상태 유지와 매개변수 유효성을 위한 클래스 데코레이터
    • 컨텍스트 매니저
      • 컨텍스트 매니저와 유용성
      • 컨텍스트 매니저의 이해
      • 컨텍스트 매니저 빌드를 위한 contextlib 사용
      • 컨텍스트 매니저 사용의 실제 사례
    • 요약

  • 6장. 제너레이터와 이터레이터
    • 이터레이터와 제너레이터의 활용
      • 이터레이터의 이해
      • 제너레이터란 무엇인가?
      • 이터레이터를 사용하는 경우
      • itertools 사용
      • 제너레이터가 유용한 이유
      • 리스트 컴프리헨션과 이터레이터
    • yield 키워드 활용
      • yield from
      • 데이터 구조와 비교해 더 빠른 yield
    • 요약

  • 7장. 새로운 파이썬 기능 활용
    • 비동기 프로그래밍
      • 파이썬의 비동기 도입
      • 작동 방법
      • 비동기 제너레이터
    • 파이썬 타이핑
      • 파이썬 타입
      • typing 모듈
      • 데이터 타입이 코드를 느리게 하는가?
      • 타이핑으로 더 나은 코드를 작성하는 방법
      • 타이핑의 단점
    • super() 메서드
    • 타입 힌트
    • pathlib를 사용한 경로 처리 효율화
    • 함수 print()
    • f-string
    • 키워드 전용 인자
    • 딕셔너리 순서 유지
    • 이터레이터 해제
    • 요약

  • 8장. 파이썬 코드의 디버깅과 테스트
    • 디버깅
      • 디버깅 도구
      • breakpoint
      • 프로덕션 코드 출력 대신 logging 모듈 사용
      • 병목 현상 식별을 위한 메트릭 라이브러리 사용
      • IPython이 도움이 되는 방법
    • 테스팅
      • 테스팅이 중요한 이유
      • Pytest와 UnitTest
      • 속성 테스트
      • 테스트 보고서 생성 방법
      • 단위 테스트 자동화
      • 프로덕션을 위한 코드 준비
      • 파이썬의 단위 테스트와 통합 테스트 실행
    • 요약

  • 9장. 멋진 파이썬 도구
    • Sphinx
    • 커버리지
    • pre-commit
    • virtualenv를 위한 Pyenv
    • 주피터 랩
    • 파이참/VSCode/서브라임
    • Flake8/Pylint

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p.27 : 본문 5행]
코드를 작성하면서 의식적으로 결정해야 한다.
->
코드를 작성할 때 신중하게 결정해야 한다.

[p.27 : 본문 5행]
한 라인 코드를 쓰는 것이 때로는 코드를 읽을 수 있게 해주지만 그렇지 않을 때도 있다.
->
한 라인 코드가 가독성이 좋은 경우도 있지만(읽기 쉬운 경우도 있지만) 그렇지 않은 경우도 있다.

[p.29 : 아래서 5행]
"".join() 메서드는 다양한 파이썬 구현에서 더 적은 시간 연계를 보장한다.
->
"".join() 메서드를 사용하면 문자열 결합에 걸리는 시간이 줄어든다.

[p.29 : 아래서 2행]
각 연결에 대해 새로운 메모리를 할당해야 하기 때문이다.
->
문자열을 결합할 때마다 새로운 메모리를 할당해야 한다.