파이썬 강좌 – 코드 스타일 – 코드의 일관성 유지하기

  1. 프롤로그
  2. 개발 첫걸음
    1. 컴퓨터 구성요소 – 컴퓨터는 어떤 걸 할 수 있나?
    2. 개발과 관련된 용어
    3. 파이썬의 선택 – 왜 파이썬인가?
    4. 파이썬 설치 – Hello World 출력하기
    5. Visual Studio Code 의 편리한 기능
    6. REPL과 콘솔 창 – 파이썬 동작시키기
  3. 파이썬 기초
    1. 기초 입출력 – 소통하기
    2. 변수와 대입 – 기억하기
    3. 연산자 – 계산하기
    4. 조건문 – 분기를 만들기
    5. 반복문 – 비슷한 작업을 반복하기
    6. 반복문 코딩하기
    7. 변수와 리스트 – 비슷한 변수들을 묶기
    8. for, range – 리스트의 항목을 다루기
    9. 함수와 메소드의 호출 – 편리한 기능 이용하기
    10. 모듈 설치와 사용 – 유용한 기능 끌어다 쓰기
    11. 문자열 – 텍스트 다루기
  4. 파이썬 중급
    1. 함수를 직접 만들기 – 자주 쓰는 기능을 묶기
    2. 딕셔너리, 튜플, 세트 – 변수를 다양한 방법으로 묶기
    3. 클래스와 객체 – 변수를 사람으로 진화시키기
    1. 상속 – 클래스를 확장하기
    2. 정체성과 동질성 – 객체의 성질
    3. 특별 메소드와 연산자 – 파이썬의 내부 작동방식 이해하기
    4. 다양한 함수 인수 – 유연한 함수 만들기
    5. 슬라이싱 – 리스트 간편하게 접근하기
    6. 지능형 리스트(List Comprehension) – 리스트 갖고 놀기
    7. namedtuple - 데이터 묶음 손쉽게 만들기
    8. 조건 표현식 (Conditional Expression) - 간단한 분기 나타내기
    9. 코드 스타일 - 코드의 일관성 유지하기
    10. 명령문, 표현식 – 문법을 이루는 것들
    11. 본격적인 검색 해보기
  5. 파이썬 고급
    1. 일급 함수 다루기
    2. NotImplementedError와 NotImplemented
    3. 어노테이션 – 수월하게 프로그래밍하기
    1. 내장 함수 톺아보기
    2. 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
    3. 변수의 범위 – 이름 검색의 범위
  6. 파이썬 심화
    1. 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
    2. 데코레이터 – 함수의 기능을 강화하기
    3. 프로퍼티
    4. 제너레이터
    5. async와 await
    6. 객체로서의 클래스 – 클래스를 동적으로 정의하기
  7. 파이썬 프로젝트 실습
    1. 원카드 게임 만들기 (1)
    2. 원카드 게임 만들기 (2)
    3. 원카드 게임 만들기 (3) (작성중)
    4. 턴제 자동 전투 게임 만들기 (작성중)
  8. 실전 (파이썬 외적인 것들)
    1. 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
    2. 유니코드 – 컴퓨터에서 문자를 표기하는 방법
    3. html, css, 인터넷 – 자동화 첫 걸음 내딛기
    4. 네트워크 – 인터넷으로 통신하는 방법
    5. 문서 – 문맥을 읽어보기

이번 강좌는 좀 쉬어가는 강좌입니다. 프로그램의 규모가 커지거나, 프로그램을 여러 기간에 걸쳐 오랫동안 개발하거나, 다른 사람들이 만든 프로그램을 많이 참조하려고 하거나, 내가 만든 코드를 다른 사람들에게 공유하고자 할 때 코드 스타일에 관한 내용을 알아두는 게 좋습니다. 이번 시간에는 새로운 기능이나 개념을 배운다기 보다, 코드를 대하는 일종의 태도를 이야기합니다. 파이썬으로 할 수 있는 것들을 더 배우고 싶다면 이번 강좌는 패스하고 다른 것부터 보셔도 좋습니다.


코드 스타일의 필요성

파이썬의 가장 큰 특징은 들여쓰기를 마음대로 못한다는 것입니다. 들여쓰기 한 칸당 블록을 의미하게 되고, 들여쓰기가 제대로 되지 않으면 SyntaxError라며 아예 프로그램 실행조차 거부해버립니다. 이처럼 파이썬은 다른 언어들보다 상대적으로 규칙이 꽉 짜여져 있기 때문에 의도하지 않았더라도 코드 스타일이 강제적으로 일관된다는 장점이 있습니다. (자유로움을 추구하는 사람은 단점으로 볼 지도 몰라요)

하지만 그 중에도 사람에 따라서 다르게 개발할 수 있는 선택지가 수두룩빽빽합니다. 변수 이름을 짓는다고 상상해보세요. person_namepersonName 중 어느 것을 쓸 것인지 개발자는 결정해야 합니다. 사실 “결정”이라는 거창한 말을 쓸 필요도 없을지 모릅니다. 대문자를 쓰고 안쓰고, _를 쓰고 안쓰고가 그렇게 중요한 문제일까요? a=1a = 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이라는 값을 활용하는 법도 알고 있다면 유용하게 쓸 수 있을 것입니다.

  1. 프롤로그
  2. 개발 첫걸음
    1. 컴퓨터 구성요소 – 컴퓨터는 어떤 걸 할 수 있나?
    2. 개발과 관련된 용어
    3. 파이썬의 선택 – 왜 파이썬인가?
    4. 파이썬 설치 – Hello World 출력하기
    5. Visual Studio Code 의 편리한 기능
    6. REPL과 콘솔 창 – 파이썬 동작시키기
  3. 파이썬 기초
    1. 기초 입출력 – 소통하기
    2. 변수와 대입 – 기억하기
    3. 연산자 – 계산하기
    4. 조건문 – 분기를 만들기
    5. 반복문 – 비슷한 작업을 반복하기
    6. 반복문 코딩하기
    7. 변수와 리스트 – 비슷한 변수들을 묶기
    8. for, range – 리스트의 항목을 다루기
    9. 함수와 메소드의 호출 – 편리한 기능 이용하기
    10. 모듈 설치와 사용 – 유용한 기능 끌어다 쓰기
    11. 문자열 – 텍스트 다루기
  4. 파이썬 중급
    1. 함수를 직접 만들기 – 자주 쓰는 기능을 묶기
    2. 딕셔너리, 튜플, 세트 – 변수를 다양한 방법으로 묶기
    3. 클래스와 객체 – 변수를 사람으로 진화시키기
    1. 상속 – 클래스를 확장하기
    2. 정체성과 동질성 – 객체의 성질
    3. 특별 메소드와 연산자 – 파이썬의 내부 작동방식 이해하기
    4. 다양한 함수 인수 – 유연한 함수 만들기
    5. 슬라이싱 – 리스트 간편하게 접근하기
    6. 지능형 리스트(List Comprehension) – 리스트 갖고 놀기
    7. namedtuple - 데이터 묶음 손쉽게 만들기
    8. 조건 표현식 (Conditional Expression) - 간단한 분기 나타내기
    9. 코드 스타일 - 코드의 일관성 유지하기
    10. 명령문, 표현식 – 문법을 이루는 것들
    11. 본격적인 검색 해보기
  5. 파이썬 고급
    1. 일급 함수 다루기
    2. NotImplementedError와 NotImplemented
    3. 어노테이션 – 수월하게 프로그래밍하기
    1. 내장 함수 톺아보기
    2. 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
    3. 변수의 범위 – 이름 검색의 범위
  6. 파이썬 심화
    1. 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
    2. 데코레이터 – 함수의 기능을 강화하기
    3. 프로퍼티
    4. 제너레이터
    5. async와 await
    6. 객체로서의 클래스 – 클래스를 동적으로 정의하기
  7. 파이썬 프로젝트 실습
    1. 원카드 게임 만들기 (1)
    2. 원카드 게임 만들기 (2)
    3. 원카드 게임 만들기 (3) (작성중)
    4. 턴제 자동 전투 게임 만들기 (작성중)
  8. 실전 (파이썬 외적인 것들)
    1. 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
    2. 유니코드 – 컴퓨터에서 문자를 표기하는 방법
    3. html, css, 인터넷 – 자동화 첫 걸음 내딛기
    4. 네트워크 – 인터넷으로 통신하는 방법
    5. 문서 – 문맥을 읽어보기

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to top