소스코드는 한번 짜면 끝이 아닙니다. 프로그램이 문제없이 돌아가기 위해서는 유지보수를 계속 해야합니다.
유지보수를 위해서는 네이밍 규칙 정하기, 간결한 코드 작성, 버전 관리 툴 사용등과 같은 방법이 있습니다.
하지만 그 무엇보다도 코드가 어떤 동작을 하는지, parameter은 무엇이고 return 값은 무엇인지에 대해서 문서화를 해야 새로운 팀원이 코드를 봐도 빠르게 이해하고 팀에 녹아들 수 있을것입니다.
저는 개발자가 많은 프로젝트에 참여한 경험이 없어서, 이때까지 문서화에 소홀히해왔습니다.
최근 파이썬으로 진행한 프로젝트가 커지면서 문서화가 필요하다고 생각해서 공부하게 되었고 그 내용을 포스팅으로 정리했습니다.
1. Docstring 위치
함수 선언부 바로 아래에 따옴표를 사용해서 작성할 수 있습니다.
def get_arr_size(arr):
"""
여기에 함수를 설명합니다.
"""
size = len(arr)
return size
2. Docstring 작성방법
위에서 선언한 get_arr_size는 함수 이름 그대로 parameter로 들어온 arr의 사이즈를 반환하는 함수입니다.
함수를 문서화 할 때는, 1. 함수 기능 설명 2. parameter 3. return 값을 작성해야합니다.
def get_arr_size(arr):
"""
arr의 size를 반환한다.
:param arr: list
:return size: int
"""
size = len(arr)
return size
3. Docstring 확인하기
gaussian_filter.py 파일에 get_gaussian_filter_1d 함수를 아래와 같이 선언하고, docstring.py에서 함수의 docstring을 가져와봤습니다.
# gaussian_filter.py
#-*- coding:utf-8 -*-
import numpy as np
import math
def get_gaussian_filter_1d(size, sigma):
"""
1D 가우시안 필터를 생성한다.
:param size: int 커널 사이즈
:param sigma: float
:return kernel: np.array
"""
assert size%2==1, "Filter Dimension must be odd" # filter size는 무조건 odd여야한다
arr = np.arange(math.trunc(size/2)*(-1), math.ceil(size/2)+1 ,1) # 중심으로 부터의 거리가 값인 배열 생성
kernel_raw = np.exp((-arr*arr)/(2*sigma*sigma)) # 가우시안 필터 공식
kernel = kernel_raw/kernel_raw.sum() # 정규화
return kernel
# docstring.py
#-*- coding:utf-8 -*-
from gaussian_filter import get_gaussian_filter_1d
print(get_gaussian_filter_1d.__doc__)
파이썬으로 개발하다 보면 라이브러리의 사용법을 몰라서 에러가 나는 경우가 많습니다.
이 때 docstring을 확인하면 개발할 때 무엇이 문제인지 빠르게 확인할 수 있습니다.
Terminal에서 원하는 패키지를 import 한 뒤에 help(함수이름)으로 docstring을 확인할 수 있습니다.
help(np.arange)를 하면 다음과 같이 docstring 만 보여줍니다.
위 화면에서 이전으로 돌아가고 싶다면 q를 누르면 됩니다.
유명한 패키지의 docstring을 보면서 문서화란 이런거다!를 느끼고 있습니다.
좋은 개발자가 되기 위해서는 문서화를 위한 글도 잘 써야하는거겠죠ㅠㅠ
개발자가 될 때 까지 화이팅하겠습니다.
잘못된 내용이 있다면 언제든지 댓글이나 메일로 알려주시면 감사하겠습니다.
이 포스팅이 도움이 되었다면 공감 부탁드립니다.
궁금한 점은 언제든지 댓글 남겨주시면 답변해드리겠습니다:D
'major > Python' 카테고리의 다른 글
파이썬에서 mongoDB 연동하기 - Pymongo (3) | 2020.04.20 |
---|---|
파이썬으로 JSON 파싱하기 (6) | 2020.04.19 |
파이썬으로 가우시안 필터링하기 (3) | 2020.04.17 |
파이썬으로 REST API 개발하기 - Django (1) | 2020.04.07 |
파이썬 공공 API 가져오기 - 공적 마스크 (4) | 2020.03.25 |