사람만 읽는 코드

image-center

인간은 읽을 수 있고, 로봇은(혹은 악성 프로그램은) 읽을 수 없는 이미지를 CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart) 라고 한다. CAPTCHA라는 용어가 낯설게 느껴진다면 콘서트 예매를 할 때를 떠올려 보자(혹은 회원가입을 할 때를 떠올려도 좋다). 우리는 마지막 확인 버튼을 누르기 전에 자동 입력 방지 문자를 입력한다. 이 자동 입력 방지 문자도 CAPTCHA의 일종이다.

CAPTCHA 처럼 매크로를 막아내는 역할은 아니지만 프로그래밍에서도 ‘사람만 읽기로’ 약속된 코드가 있다. ‘주석’ 이라고 부르는데, 이 주석은 사람만 읽고, 프로그램은 무시하도록 약속되어 있다. 주석은 보통 다른 개발자(‘미래의 나’를 포함해서)를 위해 코드에는 드러나지 않은 배경지식을 설명하거나, 복잡한 코드를 쉽게 설명하기 위한 용도로 쓰인다.

예를 들어, 인터넷 쇼핑몰 프로그램에서 상품 금액에 2500원을 더하는 코드가 있다고 하자. 만약 아무런 주석도 적혀있지 않다면 신입 개발자는 이 2500원이 왜 더해지는지 모르거나, 어림짐작만 할 뿐이다. 그러나 주석으로 ‘이 금액은 상품 배송비이다.’ 라고 적혀 있다면 신입 개발자는 이 2500원이 택배비를 의미한다는 것을 바로 알 수 있다.

이 외에도 주석의 용도를 정리하자면 다음과 같다.

주석의 용도

  • 프로그램 작성자의 의도를 나타낸다.
  • 프로그램 자체에는 드러나지 않는 배경지식을 나타낸다.
  • 장황한 코드가 정확히 무엇을 하기 위해 존재하는지 쉽게 설명한다.
  • 지금은 바빠서 못 했지만 나중에 해야할 작업을 TODO 주석으로 추가해 놓을 수 있다.

주석 적기

파이썬의 한 줄 주석(inline comment)은 # 으로 표현한다. # 으로 시작하는 줄(Line)은 프로그램이 그냥 무시하고 지나간다. 마치 컴퓨터에게는 보이지 않는 것 처럼 말이다.

# 한 줄 주석 입니다.

내용이 길어서 주석을 여러 줄(multi-line comment)에 걸쳐 나눠서 쓰고 싶다면 어떻게 할까? 그냥 # 을 연달아서 사용하면 된다.

# 여러줄
# 주석, # 이후 한 칸 띈 다음 적습니다.
# 이렇게 적습니다.

”””

여러 줄 주석을 작성할 때 “”” 혹은 ‘’’ 을 사용하라는 글을 간간히 본 적이 있다. 물론 정상적으로 “"”을 사용했다면 아무 일도 일어나지 않기 때문에 마치 주석처럼 보인다. 그러나 이는 엄밀히 말해서 주석이 아니라 문자열 리터럴임으로 주석으로 혼동하지 않기를 바란다. 문자열 리터럴이 정확히 무엇인지는 나중에 공부하도록 하자.

파이썬 스타일 가이드 (PEP8, https://www.python.org/dev/peps/pep-0008/#block-comments)은 연속으로 # 을 써서 여러 줄 주석을 표현할 것을 권장하고 있으니, ‘’’ 을 사용해서 주석으로 삼는 일은 삼가하도록 하자.

"""여러 줄 
엄밀히 말해 주석은 아닙니다."""

'''되도록이면 #을
 연달아 사용하도록 합시다'''

Ctrl + /

주석에 적을 내용이 아무리 길다 해도 우리는 매 줄 마다 # 으로 시작하는 것 말고는 주석을 만들 방법이 없다. 여기까지 읽고 이런 질문을 하고 싶은 분들도 있을 것이다.

주석이 길어지면 매 줄마다 # 과 스페이스바를 입력한 다음에 써야 한다는 거에요? 너무 번거롭지 않나요?

그렇다. 번거롭다. 세간의 개발자들이 이렇게 번거로운 것을 그냥 뒀을리가 없다. ‘개발환경 설치하기’ 에서 Pycharm 을 설치하였다면, 원하는 라인을 블록친 후에 Ctrl + / 을 눌러보자. 이는 블록쳐진 모든 라인을 전부 주석으로 바꾸는 단축키이다. 이 방법으로 주석을 작성하면 매우 간편하다. 앞으로 여러분이 자주 사용하게 될 단축키니 기억해 두자. 이처럼 기존의 코드를 주석으로 만드는 작업을 ‘주석처리’ 라고 부른다.

# print('hi') 

더 읽을거리

파이썬 스타일 가이드: https://www.python.org/dev/peps/pep-0008/

주석이 없어서 벌어진 일: http://m.thisisgame.com/webzine/nboard/257/?n=61912

Updated:

Comments