개요
Python 코드를 보다 보면 아래와 같은 부분을 발견하게 된다.
if __name__ == '__main__':
...
이 글에서는 이 코드에 대한 의미와 왜 사용하는지에 대해 정리하려고 한다.
__name__
모듈의 이름이 저장되는 변수로 import로 모듈을 가져왔을 때는 모듈의 이름이 들어간다. 하지만 모듈을 직접 실행하면 __main__이 들어간다.
예시로 아래와 같은 plus 함수를 가진 calc 모듈이 있다고 하자. 그리고 이 모듈을 직접 또는 import해 실행하여 __name__ 변수를 출력해보았다.
def plus(*args):
return sum(args)
print(f"__name__ : {__name__}")
직접 실행한 경우
import 한 경우
import calc
print(calc.plus(3, 5))
__name__ 변수의 값이 모듈의 이름과 동일하다는 것을 확인할 수 있다. 또한 plus 함수만을 호출했음에도 함수 밖의 소스가 실행된 것을 확인할 수 있다.
Python의 특징 중 하나가 main 함수가 존재하지 않는다는 것이다. 어떤 스크립트 파일이든 프로그램의 시작점이 될 수 있다. 시작점이 되는 스크립트 파일과 모듈인 파일 간에 차이가 없기 때문에 __name__ 변수의 값을 통해 스크립트 파일이 직접 실행되어 시작점에 해당하는지, 모듈로 사용되고 있는지를 구분한다.
if __name__ == '__main__':
__name__의 값이 '__main__' 일 때를 뜻하는 조건문으로, 파이썬 스크립트 파일이 직접 실행되었을 때만 조건문 아래의 코드를 실행하라는 뜻이다. 일종의 메인 함수 선언이라고 이해할 수 있다.
위에서 테스트한 calc 모듈의 __name__ 변수 출력 부분을 조건문 아래에서 실행되도록 수정했다.
def plus(*args):
return sum(args)
if __name__ == '__main__':
print(f"__name__ : {__name__}")
직접 실행하면 여전히 __name__ 변수 값이 출력되지만,
import 해서 실행한 경우에는 더 이상 __name__ 변수 값이 출력되지 않는다.
즉, if __name__ == '__main__':을 통해 그 자체로 기능을 수행하면서 다른 모듈에서 필요한 함수 등을 제공할 수 있도록 하는 코드를 작성할 수 있다.
참고 문서
https://dojang.io/mod/page/view.php?id=2448
https://hyoje420.tistory.com/45