目次
1. Python의docstring
란?
Python에서의docstring
은 함수, 클래스, 모듈 등의 코드에 설명을 추가하기 위한 특별한 문자열입니다. docstring
은 코드의 유지보수성을 높이고, 다른 개발자가 코드를 이해하기 쉽게 해 주는 데 매우 중요한 역할을 합니다. 또한, 아래에서 설명할 자동 문서 생성 도구(예: Sphinx)를 사용하면, docstring
을 활용한 문서를 만들 수 있습니다.docstring의 위치와 서식
docstring
은 대상이 되는 함수나 클래스, 모듈의 정의 바로 다음에 위치하며, 트리플 더블 쿼트로 감싸는 것이 기본 서식입니다. 다음과 같은 구문이 일반적입니다.def 함수명(인수):
"""
여기에 함수에 대한 간단한 설명을 작성합니다.
인수:
인수명 (타입): 인수에 관한 자세한 설명
반환값:
타입: 반환값에 관한 설명
"""
pass
docstring
은 Python의 내장 함수help()
나, 에디터 내의 보조 표시에도 사용되어, 코드 문서로서 큰 역할을 합니다.2. docstring의 기본적인 작성법
Python의docstring
은 함수나 클래스의 사양을 간결하고 명확하게 설명하는 데 사용됩니다. 서식으로는 먼저 함수의 목적을 간단히 설명하고, 이어서 인수와 반환값, 오류 등에 대해 기술합니다. Python의 공식 스타일 가이드인 PEP 257을 따름으로써 일관성을 유지하고, 다른 개발자도 이해하기 쉬운 코드를 작성할 수 있습니다。기본적인 docstring의 구조
한 줄짜리docstring
은 매우 짧은 설명을 제공할 때 사용됩니다. 보통 함수의 기능을 한마디로 설명하는 데 쓰이며, 다음과 같이 작성합니다。def add(a, b):
"""두 수를 더해 반환합니다."""
return a + b
여러 줄의docstring
은 보다 자세한 설명이 필요할 때 사용됩니다. 함수의 동작과 인수, 반환값에 대해 구체적으로 기술하고, 줄바꿈을 활용하여 가독성을 높입니다。def add(a, b):
"""
두 수를 더해 그 결과를 반환합니다。
인수:
a (int): 더할 첫 번째 수
b (int): 더할 두 번째 수
반환값:
int: 두 수의 합
"""
return a + b

3. docstring의 스타일(Google 스타일、NumPy 스타일、reStructuredText 스타일)
docstring
의 스타일은, 프로젝트나 사용하는 도구에 따라 다양한 형식이 존재합니다. 주로 Google 스타일、NumPy 스타일、reStructuredText 스타일의 세 가지가 널리 사용됩니다。Google 스타일
Google 스타일은 간결하고 시각적으로 이해하기 쉬운 서술이 특징입니다. 인자와 반환값은Args
와 Returns
라는 섹션 이름 아래에 작성되며, Python 함수의 설명을 원활히 이해할 수 있도록 고안되어 있습니다。def add(a, b):
"""
두 수를 더해 반환합니다.
Args:
a (int): 더할 첫 번째 수
b (int): 더할 두 번째 수
Returns:
int: 두 수의 합
"""
return a + b
NumPy 스타일
NumPy 스타일은 보다 상세한 설명을 제공하기 위한 포맷으로, 특히 과학 계산이나 데이터 분석에서 사용되는 라이브러리의 문서에서 널리 채택되고 있습니다。Parameters
와Returns
와 같은 섹션명을 사용해 인자와 반환값을 자세히 기술합니다。def add(a, b):
"""
두 수를 더해 반환합니다。
Parameters
----------
a : int
더할 첫 번째 수
b : int
더할 두 번째 수
Returns
-------
int
두 수의 합
"""
return a + b
reStructuredText 스타일
reStructuredText 스타일은 문서 생성 도구 Sphinx에서 사용되는 형식으로, 복잡한 프로젝트에서 자주 쓰입니다。Sphinx는 이 스타일을 사용하여 코드에서 자동으로 HTML이나 PDF 형식의 문서를 생성합니다。def add(a, b):
"""
두 수를 더합니다。
:param a: 더할 첫 번째 수
:type a: int
:param b: 더할 두 번째 수
:type b: int
:return: 두 수의 합
:rtype: int
"""
return a + b
4. PEP 257와 모범 사례
Python의docstring
에 관한 공식 스타일 가이드인 PEP 257에서는, docstring
의 작성 방법에 대한 명확한 지침이 제시되어 있습니다. 이를 따르면 코드의 가독성이 향상되고, 다른 개발자와 본인 모두가 코드를 보다 쉽게 이해할 수 있습니다。PEP 257의 주요 포인트
- 한 줄 docstring 간단한 함수나 메서드에는 한 줄로 간결하게 설명을 작성하는 것이 권장됩니다。
- 여러 줄 docstring 보다 상세한 설명이 필요할 경우에는 여러 줄의
docstring
을 사용합니다。 이때 첫 줄은 간단한 요약으로 하고, 이어서 빈 줄을 하나 둔 뒤 자세한 설명을 작성합니다。 - 들여쓰기와 빈 줄의 활용
docstring
안에서는 줄바꿈과 들여쓰기를 사용해 가독성을 높입니다。 또한 함수의 매개변수와 반환값에 대한 정보는 명확히 구분하여 읽기 쉽도록 정리합니다。
모범 사례
- 간결하고 명확한 설명
docstring
은 간결하면서도 함수나 클래스가 무엇을 하는지 정확히 전달해야 합니다。 불필요한 정보는 줄이되, 중요한 부분은 자세히 기술하세요。 - 일관된 스타일 유지 프로젝트 전반에서
docstring
의 스타일을 통일하면 가독성이 향상됩니다。 Google 스타일이나 NumPy 스타일 등 팀이나 프로젝트에 가장 적합한 스타일을 선택하세요。
5. docstring을 사용한 테스트(doctest)
Python에는、docstring
안의 샘플 코드가 실제로 기대한 대로 동작하는지 테스트할 수 있는 기능으로 doctest
모듈이 있습니다. 이 기능을 사용하면 docstring
에 적힌 코드 예제가 올바른지 자동으로 확인할 수 있어 코드의 신뢰성을 높일 수 있습니다。doctest
를 활용하면 문서화된 코드의 테스트를 손쉽게 수행할 수 있습니다。doctest의 기본 사용법
doctest
는 docstring
안의 샘플 코드를 자동으로 감지해 실행하고, 결과가 문서에 적힌 출력과 일치하는지 확인합니다. 다음과 같이 if __name__ == "__main__":
블록에 doctest
를 추가하면 테스트를 실행할 수 있습니다。def add(a, b):
"""
두 개의 숫자를 더하여 반환합니다。
Args:
a (int): 첫 번째 숫자
b (int): 두 번째 숫자
Returns:
int: 두 숫자의 합
Example:
>>> add(2, 3)
5
>>> add(0, 0)
0
"""
return a + b
if __name__ == "__main__":
import doctest
doctest.testmod()
위의 예에서는、doctest
가 docstring
안의 코드 샘플을 실행하고 그 결과를 비교합니다. 테스트가 성공하면 아무것도 표시되지 않지만, 실패하면 오류 메시지가 표시됩니다. 이를 통해 docstring
안의 샘플 코드가 항상 올바른지 보장할 수 있습니다。doctest를 사용하는 장점
- 코드의 일관성
doctest
를 사용하면docstring
에 적힌 샘플 코드가 실제로 동작하는지 확인할 수 있어, 코드와 문서의 일관성을 유지할 수 있습니다. 이로써 문서가 최신 코드와 항상 일치하는 상태가 유지됩니다。 - 테스트의 자동화
doctest
는 쉽게 자동화할 수 있어 함수나 클래스의 테스트를 수동으로 수행할 필요가 없습니다.doctest
를 실행하기만 하면docstring
안의 모든 코드 예제가 테스트되어 실수를 줄일 수 있습니다。

6. 실전 예:docstring
을 활용한 코드의 문서화
실제로docstring
을 활용하면 Python 코드의 가독성이 크게 향상되고, 다른 개발자들이 이해하기 쉬워집니다. 여기서는 클래스와 함수에 적절한docstring
을 추가하고, Sphinx를 사용해 자동으로 문서화하는 프로세스를 소개합니다。클래스에 대한 docstring 작성 예
클래스와 메서드에도docstring
을 작성하는 것이 권장됩니다. 클래스에 대한docstring
은 클래스가 어떤 기능을 제공하는지 간결하게 설명하고, 메서드별docstring
에서 구체적인 기능을 자세히 기술합니다。class Calculator:
"""
간단한 계산기 클래스.
이 클래스는 기본적인 덧셈, 뺄셈, 곱셈, 나눗셈을 수행합니다.
Attributes:
result (int): 계산 결과를 보관하는 변수
"""
def __init__(self):
"""
Calculator 클래스의 생성자.
초기화 시 결과는 0으로 설정됩니다.
"""
self.result = 0
def add(self, a, b):
"""
두 개의 숫자를 더하고 결과를 반환합니다.
Args:
a (int): 첫 번째 숫자
b (int): 두 번째 숫자
Returns:
int: 두 숫자의 합
"""
self.result = a + b
return self.result
이 클래스 예시에서는 클래스 전체에 대한 설명과 함께、__init__
와add
메서드에도 개별적인docstring
이 작성되어 있습니다. 이렇게 하면 클래스 사용자들은 각 메서드가 어떻게 동작하는지 쉽게 파악할 수 있습니다。Sphinx를 사용한 문서 생성
Sphinx를 사용하면、docstring
에 기반해 HTML 및 PDF 형식의 문서를 자동 생성할 수 있습니다. 먼저 Sphinx를 프로젝트에 도입하고, 설정 파일(conf.py
)을 준비합니다. 다음으로、make html
명령을 실행하면、docstring
에서 자동으로 HTML 문서가 생성됩니다。 다음 명령으로 Sphinx를 설치합니다。pip install sphinx
다음으로、sphinx-quickstart
명령을 사용해 프로젝트를 초기화하고, 프로젝트에 맞는 설정을 진행합니다. 그 후, Python 파일에 작성된docstring
이 반영된 문서를 자동으로 생성할 수 있습니다。
7. 자주 하는 실수와 피하는 방법
docstring
을 작성할 때 초보자가 빠지기 쉬운 실수가 있습니다. 이 섹션에서는 흔한 실수와 그 피하는 방법을 설명합니다.1. 모호한 설명
docstring
은 명확하고 간결하게 작성해야 하지만, 모호한 설명으로는 독자에게 의도가 전달되지 않습니다. 예를 들어, 다음 docstring
은 불충분합니다。def add(a, b):
"""두 숫자를 더합니다."""
return a + b
이 예에서는 인자와 반환값에 관한 설명이 빠져 있어, 어떤 데이터 타입을 받는지, 무엇을 반환하는지가 불명확합니다. 개선책으로 다음과 같이 작성합니다.def add(a, b):
"""
두 정수를 더하고 그 결과를 반환합니다.
Args:
a (int): 첫 번째 숫자
b (int): 두 번째 숫자
Returns:
int: 두 숫자의 합
"""
return a + b
2. 인자와 반환값의 부정확한 설명
docstring
내에서 인자와 반환값에 대한 자세한 설명이 없으면, 사용자가 함수를 올바르게 사용할 수 없습니다. 특히 함수가 복잡한 경우에는 인자의 타입과 의미, 반환값의 타입을 명확히 기술하는 것이 중요합니다。def divide(a, b):
"""두 숫자를 나눕니다."""
return a / b
이 예에서는 인자와 에러 처리에 관한 설명이 빠져 있습니다. 다음과 같이 작성하면 사용자는 함수의 사용법을 올바르게 이해할 수 있습니다。def divide(a, b):
"""
두 숫자를 나누고 결과를 반환합니다. 0으로 나누면 ZeroDivisionError가 발생합니다.
Args:
a (float): 나누어지는 수
b (float): 나누는 수
Returns:
float: 나눗셈 결과
Raises:
ZeroDivisionError: 0으로 나누려고 한 경우
"""
if b == 0:
raise ZeroDivisionError("0으로는 나눌 수 없습니다")
return a / b
이처럼, docstring
에는 충분한 정보를 담아 사용자가 오해 없이 코드를 사용할 수 있도록 하는 것이 중요합니다。
8. 정리:docstring
을 활용한 효율적인 문서 작성
이 글에서는 Python의 docstring
의 중요성, 작성 방법, 스타일, 모범 사례에 대해 설명했습니다。docstring
은 코드의 가독성과 유지보수성을 향상시키는 데 매우 중요하며, PEP 257 가이드라인을 따르면 일관성 있는 문서를 작성할 수 있습니다。 더 나아가、doctest
를 이용한 테스트와 Sphinx를 이용한 문서 생성을 통해 docstring
을 활용하는 방법도 배웠습니다。이로써 코드 품질과 개발 효율의 향상을 기대할 수 있습니다。PEP 257에 기반한 일관성 있는 문서 작성
PEP 257은 Python에서docstring
을 작성하기 위한 공식 가이드라인이며、이를 따르면 일관되고 읽기 쉬운 문서를 만들 수 있습니다。특히 간단한 한 줄짜리 docstring
과 상세한 설명을 포함한 여러 줄 docstring
을 구분해 사용함으로써 코드의 의도를 정확하게 전달할 수 있습니다。doctest를 활용한 샘플 코드 테스트
doctest
를 이용하면、docstring
에 기재된 샘플 코드를 자동으로 테스트할 수 있습니다。이로써 코드와 문서의 정합성을 유지하면서、버그나 실수를 사전에 방지할 수 있습니다。Sphinx를 이용한 문서의 자동 생성
Sphinx와 같은 문서 생성 도구를 사용하면、docstring
으로부터 자동으로 HTML이나 PDF 형식의 문서를 생성할 수 있습니다。이로써 수동 문서 작성의 수고를 덜고、항상 최신 코드에 기반한 문서를 제공할 수 있습니다。