프로그래밍에서 소스코드에 주석을 추가하는 작업은 매우 중요하다. 복잡한 로직에 대한 간단한 설명을 추가하는데 사용할 수도 있고, 소스코드에서 특정 라인들의 동작을 배제할 때 '주석처리(Comment-out)'하기도 한다. 개발 중이나 디버깅 시 아마도 여러 라인의 소스코드를 잠깐 동안 주석처리하는 동작을 많이 사용하게 될 것이다.
자바나 C언어에서는 /* 사인과 */ 사인 사이에 있는 모든 문자들을 주석처리한다. 이렇게 주석처리 된 소스코드는 컴파일러가 바이트 코드 혹은 바이너리에 포함시키지 않는다.
파이썬 한줄 주석
파이썬은 # 문자를 이용해서 주석처리를 한다. 보통은 # 문자를 쓰고 한칸 띄운 다음 주석 내용을 작성한다.
# print('이건 주석')
print('이건 주석이 아님')
# 문자의 위치는 상관없고, 소스코드에서 # 문자를 만나는 순간부터 그 라인의 끝까지 주석으로 간주한다. 즉, 다음 코드처럼 소스코드의 뒷 쪽에 주석을 붙여서 코드를 설명할 수도 있다.
print('이건 주석이 아님') # 이 뒤에 붙은건 주석
파이썬의 여러 줄 주석
앞에서 본 것처럼 파이썬에서는 '#' 문자를 이용해 주석을 달 수 있다. 특이한 점은 C언어와 자바의 // 처럼 동작하는 라인 주석 밖에 없다는 점이다. 여러 라인을 주석처리하기 위해서는 매 라인 앞에다가 '#' 문자를 달아서 주석처리하는 수 밖에 없다.
파이썬을 만든 '귀도 반 로썸(Guido van Rossum)'은 자신의 트위터를 통해 '멀티라인 문자열(multi-line string)'을 이용하여 멀티라인 주석처리를 하는 팁을 알려줬다. (링크 : 귀도 반 로썸 트윗)
print("Hello")
"""
print("This part of code")
print("will be commented-out")
"""
print("World")
예를 들어서 위 코드처럼 주석처리하고 싶은 부분을 멀티라인 문자열 (""")로 감싸서 동작하는 코드가 아닌 문자열로 만들어 버리면 주석처럼 동작하긴 한다. 작은 따옴표 3개를 연달아 사용해도 된다.
print("Hello")
'''
print("This part of code")
print("will be commented-out")
'''
print("World")
이 코드를 실행하면 다음 결과를 얻을 수 있다.
간편한 방법이지만 아쉽게도 파이썬에서 권장하는 방법은 아니라고 한다. PEP-0008에서 권장하는 방법은 매 라인 앞에 '#' 문자를 붙여서 모든 라인에 주석처리를 하는 방법이다.
파이썬 IDE 주석 단축키
파이참이나 VSCode 같은 IDE에서 자동 주석처리 기능을 제공하고 있으니 여러라인을 주석처리하거나 주석해제를 할 때에는 IDE의 기능을 이용하도록 하자.
대부분의 IDE에서는 [Ctrl] + [/] 키 조합을 통해 주석처리를 제공하고 있다. 파이썬 IDLE의 경우 [Alt] + [3], [Alt] + [4] 키를 이용해 주석을 생성하고 제거할 수 있다.
주석처리 주의사항
C언어나 C++, Java 같은 언어는 Statement를 세미콜론으로 구별하고, 코드의 블럭을 중괄호({, })로 나타낸다. 때문에 한줄 혹은 여러 줄의 소스코드 부분을 주석처리해도 문법을 해치지 않는한 큰 문제가 발생하지 않는다.
하지만 파이썬은 들여쓰기(인덴트)가 문법의 일부이기 때문에 소스코드에 주석을 달거나 코드를 주석처라하는 경우 주의해야한다.
예를 들어 다음 같은 코드는 에러를 발생시킨다.
class example:
"""
이 클래스는 북치고 장구치는 클래스다
"""
def 북치기():
print("북")
def 장구치기():
print("장구")
주석의 인덴트가 맞지 않기 때문이다. 주석처리한 따옴표 구간의 인덴트를 잘 맞추면 에러가 발생하지 않는다.
class example:
"""
이 클래스는 북치고 장구치는 클래스다
"""
def 북치기():
print("북")
def 장구치기():
print("장구")
물론 한줄짜리 주석처리를 사용한 경우에는 이런 인덴트 문제는 없다.
class example:
# 이 클래스는
# 북치고
# 장구치는 클래스다
def 북치기():
print("북")
def 장구치기():
print("장구")
이렇게 작성해도 문법에 어긋나지 않는다. 그래서 파이썬이 # 을 이용한 주석처리를 권장하나보다. IDE를 사용한다면 그냥 맘편히 [Ctrl] + [/] 기능을 이용하면 될 것 같다.
여기에 더해서 코드의 유일한 바디 부분을 주석처리하는 경우 문법 에러가 발생할 수 있다.
value = input()
if value == 1:
# print('OK')
else:
print('Cancel')
이 코드의 경우 value 값이 1일 때 실행할 조건문의 바디 부분에 있던 print() 함수를 주석처리해서 바디가 비어있는 상황이다. 이 경우 바디가 비어있기 때문에 문법에러가 발생한다.
이런 경우라면 pass 구문을 넣어서 문법 에러를 우회할 수 있다.
value = input()
if value == 1:
# print('OK')
pass
else:
print('Cancel')
소스코드를 작성할 때, 로직을 나타내는 코드도 중요하지만 적절하게 잘 사용한 주석도 소스코드의 품질을 높이는데 중요한 역할을 한다고 생각한다. (물론 주석이 필요없을 정도의 명쾌한 코드가 베스트이지만...)
댓글