- 프롤로그
- 개발 첫걸음
- 파이썬 기초
- 파이썬 중급
- 파이썬 고급
- 내장 함수 톺아보기
- 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
- 변수의 범위 – 이름 검색의 범위
- 파이썬 심화
- 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
- 데코레이터 – 함수의 기능을 강화하기
- 프로퍼티
- 제너레이터
- async와 await
- 객체로서의 클래스 – 클래스를 동적으로 정의하기
- 파이썬 프로젝트 실습
- 원카드 게임 만들기 (1)
- 원카드 게임 만들기 (2)
- 원카드 게임 만들기 (3) (작성중)
- 턴제 자동 전투 게임 만들기 (작성중)
- 실전 (파이썬 외적인 것들)
- 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
- 유니코드 – 컴퓨터에서 문자를 표기하는 방법
- html, css, 인터넷 – 자동화 첫 걸음 내딛기
- 네트워크 – 인터넷으로 통신하는 방법
- 문서 – 문맥을 읽어보기
이번 강좌는 좀 쉬어가는 강좌입니다. 프로그램의 규모가 커지거나, 프로그램을 여러 기간에 걸쳐 오랫동안 개발하거나, 다른 사람들이 만든 프로그램을 많이 참조하려고 하거나, 내가 만든 코드를 다른 사람들에게 공유하고자 할 때 코드 스타일에 관한 내용을 알아두는 게 좋습니다. 이번 시간에는 새로운 기능이나 개념을 배운다기 보다, 코드를 대하는 일종의 태도를 이야기합니다. 파이썬으로 할 수 있는 것들을 더 배우고 싶다면 이번 강좌는 패스하고 다른 것부터 보셔도 좋습니다.
코드 스타일의 필요성
파이썬의 가장 큰 특징은 들여쓰기를 마음대로 못한다는 것입니다. 들여쓰기 한 칸당 블록을 의미하게 되고, 들여쓰기가 제대로 되지 않으면 SyntaxError
라며 아예 프로그램 실행조차 거부해버립니다. 이처럼 파이썬은 다른 언어들보다 상대적으로 규칙이 꽉 짜여져 있기 때문에 의도하지 않았더라도 코드 스타일이 강제적으로 일관된다는 장점이 있습니다. (자유로움을 추구하는 사람은 단점으로 볼 지도 몰라요)
하지만 그 중에도 사람에 따라서 다르게 개발할 수 있는 선택지가 수두룩빽빽합니다. 변수 이름을 짓는다고 상상해보세요. person_name
과 personName
중 어느 것을 쓸 것인지 개발자는 결정해야 합니다. 사실 “결정”이라는 거창한 말을 쓸 필요도 없을지 모릅니다. 대문자를 쓰고 안쓰고, _
를 쓰고 안쓰고가 그렇게 중요한 문제일까요? a=1
과 a = 1
의 차이를 보세요. 기능적으로는 완전히 동일하고 잘 작동합니다. 이 띄어쓰기를 하고 안하고의 여부가 그렇게 중요할까요?
사실 중요하다는 것은 그 코드를 짜는 사람이나 그 그룹 마음입니다. 모든 코드 스타일은 권고사항일 뿐이지 반드시 지켜야 할 필요는 없습니다. 하지만 통일된 스타일이 주는 안정감이나 일관성에서 오는 편안함이 있다는 것은 인정해야 할 것입니다. 변수의 개수가 몇십 개를 넘어가면 변수 이름을 새로 지을때 상당히 고민하게 됩니다. 기존에 있던 변수 명과 헷갈리기 일쑤이지요. 다양한 기능이 몇십 개의 함수와 클래스로 분화되기 시작하면 그 코드를 보는 한두달 뒤의 “내”가 코드가 어떻게 돌아가는지 이해하기 위해 다시 머리를 싸매야 할지도 모릅니다.
코드 스타일
파이썬에서는 PEP 8(영어)로서, 스타일 가이드라는 공식 문서를 만들고 있습니다. 어떤 분이 번역글(티스토리, EG공간)을 써 올린걸 참고로 같이 보면 될 듯합니다. 살펴보시면 아시겠듯이, 내용이 굉장히 방대합니다! 일단 변수/함수의 이름 권고사항에 관한 내용을 가지고 와 보겠습니다.
함수 및 변수명
Function and Variable Names
가독성 향상을 위해 함수명은 소문자로 하며 단어 구분은
_
로 합니다. 변수명도 함수명 규칙을 그대로 따릅니다.Function names should be lowercase, with words separated by underscores as necessary to improve readability. Variable names follow the same convention as function names.
mixedCase(첫 번째 글자는 소문자로 하고 그 다음 단어마다 대문자를 쓰는 방식)은 이미 해당 스타일이 고수되고 있는 상황에서만, 하위 호환성을 위해 허용하도록 합니다. (예: threading.py)
mixedCase is allowed only in contexts where that’s already the prevailing style (e.g. threading.py), to retain backwards compatibility.
이제, 대입문에서 띄어쓰기를 할지 말지 결정해봅시다.
표현식과 명령문에서의 띄어쓰기 – 기타 권고사항
Whitespace in Expressions and Statements – Other Recommendations
다음 이항 연산자를 사용할 때에는 항상 양쪽에 띄어쓰기를 한 칸 하세요 – 대입 연산자(
=
), 복합 대입 연산자(+=
,-=
등), 비교 연산자(==
,<
,>
,!=
,<>
,<=
,>=
,in
,not in
,is
,is not
), 논리 연산자(and
,or
,not
)Always surround these binary operators with a single space on either side: assignment (=), augmented assignment (+=, -= etc.), comparisons (==, <, >, !=, <>, <=, >=, in, not in, is, is not), Booleans (and, or, not).
코드 의도 보여주기
코드 스타일을 넘어서서, 어떤 선택이 기능상에 큰 차이를 불러오지 않더라도, 코딩하는 사람의 의도를 명확히 보여줄 수 있는 코드라면 그렇게 하는 편이 좋습니다. 주석과 어노테이션을 적극적으로 사용하고, 필요하다면 함수의 인수를 None
으로 두거나 NotImplemented
이라는 값을 활용하는 법도 알고 있다면 유용하게 쓸 수 있을 것입니다.
- 프롤로그
- 개발 첫걸음
- 파이썬 기초
- 파이썬 중급
- 파이썬 고급
- 내장 함수 톺아보기
- 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
- 변수의 범위 – 이름 검색의 범위
- 파이썬 심화
- 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
- 데코레이터 – 함수의 기능을 강화하기
- 프로퍼티
- 제너레이터
- async와 await
- 객체로서의 클래스 – 클래스를 동적으로 정의하기
- 파이썬 프로젝트 실습
- 원카드 게임 만들기 (1)
- 원카드 게임 만들기 (2)
- 원카드 게임 만들기 (3) (작성중)
- 턴제 자동 전투 게임 만들기 (작성중)
- 실전 (파이썬 외적인 것들)
- 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
- 유니코드 – 컴퓨터에서 문자를 표기하는 방법
- html, css, 인터넷 – 자동화 첫 걸음 내딛기
- 네트워크 – 인터넷으로 통신하는 방법
- 문서 – 문맥을 읽어보기