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 되어 사용되는지를 구분하기 위해서 사용하는 것입니다.
'파이썬 기초' 카테고리의 다른 글
[파이썬 코딩] 람다 함수(lambda function) 이해하기 (0) | 2020.08.31 |
---|---|
[파이썬 코딩] 예외 처리 제대로 이해하기 (0) | 2020.08.23 |
[파이썬 기초] 리스트 컴프리헨션(list comprehension) 이해하기 (0) | 2020.08.20 |
[파이썬 기초] python 리스트(List) 이해하기 (0) | 2020.08.19 |
파이썬 코딩 규칙 (0) | 2020.08.18 |