남이 작성한 코드를 읽게 되면, 코드를 이해하는 시간이 생각보다 오래 걸리는 경우가 있다. 심지어 자신이 작성했던 코드를 나중에 다시 읽어볼 때도 비슷한 일이 생길 수 있다. 코드가 하는 행동 자체는 쉽게 이해 되더라도, 예상과 다르게 만들어진 부분을 마주쳤을 때 그 의도를 파악하느라 시간이 오래 걸리는 경우가 많다.
코드는 프로그램의 동작에 완전히 관여한다. 그런데 코드는 무엇을 하는지(what)와 어떻게 하는지(how)만을 설명하고, 왜(why) 그렇게 만들어졌는지는 설명하지 못한다. 이는 코드를 이해하는 시간을 늘리는 원인이 된다. 이런 문제를 극복하기 위해 각각의 코드가 왜 만들어졌는지를 설명해야 하고, 이를 위해 주석(Comment)이라는 기능을 사용할 수 있다.
이전 단원에서 만들었던 코드를 다시 열어서, print문이 작성된 줄의 맨 앞에 # 기호를 삽입해 보자. 내용이 다음처럼 변하면 된다. 글자들이 모두 회색으로 보여지는 것처럼, 코드가 비활성화된 느낌이 들 것이다.
# print('Hello, world!')
이 상태로 프로그램을 실행하면, #을 삽입하기 전과 다르게 터미널에 아무 내용도 출력되지 않을 것이다. 이처럼 파이썬에서 # 기호 이후부터 그 줄이 끝나기까지의 모든 내용은 '주석'이라는 요소로 분류되고, 이 주석에 포함된 내용은 코드가 실행되는 시점에 아예 무시된다.
주석의 특징을 응용해, 코드 사이사이에 설명을 적어둘 수 있다. 아직 print밖에 배우지 않은 상황이라 좀 과하지만, 다음의 예제를 보자.
# Hello, world! 를 출력합니다.
print('Hello, world!')
결과
Hello, world!
다음 코드의 내용 일부를 주석으로 만들어서, 터미널에 b라는 내용만 출력되도록 해 보자. 삭제되는 내용이 있으면 안 된다.
print('a')
print('b')
print('c')
결과
b
PyCharm에서는 Windows 기준 Ctrl + /, Mac 기준 Command + / 단축키를 통해 현재 커서가 위치한 줄을 주석 처리할 수 있다.
프로그래밍 언어마다 주석을 표현하는 문법이 다르다. 주석의 시작으로 #을 사용하는 언어는 파이썬과 Ruby, Shell 스크립트 정도가 있고, 보통 //를 사용하는 경우가 많다. 순서대로 Java, JavaScript, Go의 예다.
class Main {
public static void main(String[] args) {
// Hello, world! 를 출력합니다.
System.out.println("Hello, world!");
}
}
// Hello, world! 를 출력합니다.
console.log('Hello, world!');
package main
import "fmt"
func main() {
// Hello, world! 를 출력합니다.
fmt.Println("Hello, world!")
}
Matlab은 주석 표현에 % 기호를 사용한다.
% Hello, world! 를 출력합니다.
disp('Hello World')
Haskell은 주석 표현에 --를 사용한다.
module Main where
-- Hello, world! 를 출력합니다.
main = putStrLn "Hello, world!"
주석을 작성할 때 참고할 수 있는 관례가 있다. 꽤 많은 내용이 있는데, 그들 중 대표적이고 쉬운 규칙을 3가지만 가져왔다.
이 규칙들을 모두 어긴 주석 처리는 다음과 같다.
print('Hello, world!') #Hello, world!를 출력합니다.
#과 내용 사이에 빈 칸이 없고, 명백한 이유가 없음에도 코드 뒤에 주석을 이어붙였으며, 코드와 주석 사이에 2칸 이상을 띄우지 않았다. 이렇게 작성된 주석은 PyCharm에서도 밑줄을 그어, 관례에 맞지 않다는 것을 경고한다.
다음은 이 규칙들을 모두 지킨 주석 처리다.
# Hello, world!를 출력합니다.
print('Hello, world!')
그리고, 몇 가지 권고 사항도 있다.
다음처럼 코드가 작성된 줄에 그대로 이어붙인 주석을 Inline comment라고 부른다.
print('Hello, world!') # Hello, world!를 출력합니다.
다음처럼 한 줄을 차지한 주석을 Block comment라고 부른다.
# Hello, world!를 출력합니다.
print('Hello, world!')
주석을 여러 줄에 걸쳐 작성하기 위해, Block comment를 여러 줄에 연속으로 사용할 수 있다.
# 1단원 실습 내용입니다.
# Hello, world!를 출력합니다.
print('Hello, world!')
다음처럼 문자열 리터럴을 사용하는 방법도 있다.
'''
1단원 실습 내용입니다.
Hello, world!를 출력합니다.
'''
print('Hello, world!')
파이썬의 모든 리터럴 표현식은 그 자체로 statement가 될 수 있으므로, 문자열 리터럴을 주석에 응용할 수 있다. 그러나 스타일 가이드에서는 문자열 리터럴을 사용한 주석은 docstring에서만 사용할 것을 권장하고 있다. 따라서 여러 줄에 걸쳐 주석을 작성하는 경우, Block comment를 여러 개 사용하도록 하자.