본문 바로가기

파이썬 기초

if __name__ == "__main__" 제대로 이해하기

if name main

if __name__ == "__main__"을 제대로 이해하기

인터넷 등을 통해 파이썬 코드를 찾아서 보게 되면 if __name__ == "__main__"이라고 작성된 부분을 분명히 보았을 것입니다. 많은 파이썬 개발자들이 보편적으로 사용하고 있는 코드입니다. 

 

오늘은 if __name__ == "__main__"의 의미에 대해서 제대로 파 해쳐 봅시다.

 

__name__ 변수 이해하기

파이썬의 모든 모듈에서는 __name__이라는 변수를 사용할 수 있습니다.

__name__ 변수에는 모듈의 이름이 저장되어있습니다.

간단한 출력문을 수행을 통해 정확한 이해 하여 봅시다.

 

먼저 hello.py 파일을 작성합니다.

my_print() 함수에 __name__ 변수 출력문만 있습니다.

def my_print():
	print("hello.py : ", __name__)

my_print()

 

똑같이 python.py 파일을 작성합니다.

def my_print():
	print("python.py : ", __name__)

my_print()

 

마지막으로 test.py 파일을 아래와 같이 hello 모듈과 python 모듈을 import만 실시합니다.

import hello
import python

 

test.py 파일을 실행하면 다음과 같이 각 모듈의 이름(hello, python)이 출력됩니다.

hello.py : hello
python.py : python

 

파이썬은 모듈을 import 하여 가져오게 되면 해당 모듈이 실행됩니다.

따라서 test.py에서 import만 추가하여도 각각의 모듈이 실행되면서 출력됩니다.

 

정리해보면 __name__ 변수는 각 모듈의 이름이 저장되어 있습니다.

 

"__main__" 이해하기

프로그래밍 언어에서 최상위 코드가 실행되는 시작점 또는 프로그램 진입점을 엔트리 포인트(Entry point)라고 합니다.

__main__"은 이처럼 최상위 코드가 실행되는 엔트리 포인트가 있는 영역의 이름을 의미합니다.

 

그러면 앞서 사용하였던 예제에서 test.py가 최상위 코드가 실행되는 엔트리 포인트가 되는 것입니다.

test.py 파일에 my_print() 함수를 추가하여 확인해 보겠습니다.

import hello
import python

def my_print():
	print("test.py : ", __name__)

my_print()

 

실행결과는 아래와 같이 test.py는 모듈 이름이 아니라 __name__ 변수에 "__main__" 이 저장됩니다.

hello.py : hello
python.py : python
test.py : __main__

 

__name__ 변수에는 표준 입력(standart input), 스크립트(script) 또는 대화식 프롬프트에서 read 하게 되면 '__main__'으로 저장됩니다.

 

그러면 hello.py를 단독으로 실행시켜 봅시다. hello.py가 엔트리 포인트가 되어 __name__ 변수에 "__main__" 이 저장되어 다음과 같이 출력되는 것을 확인할 수 있습니다.

hello.py : __main__

 

마찬가지로 test.py가 다른 파일에 모듈로 import 된다면 __name__에는 모듈 이름인 "test"가 저장됩니다.

 

따라서 if __name__ == "__main__"이라고 사용하는 이유는 현재 파일이 엔트리 포인트로 사용되는지, 모듈로 import 되어 사용되는지를 구분하기 위해서 사용하는 것입니다.