초보 개발자

if __name__ == __main__ 을 알아보자 !! 본문

Python/이것 저것

if __name__ == __main__ 을 알아보자 !!

taehyeki 2022. 1. 3. 17:22

파이썬을 시작하면 if __name__ == __main__와 같은 것을 볼 수 있을 것이다.

처음에 이러한 부분은 설명하지 않고 그냥 넘어가기에 볼 때마다 거슬렸는데 이번 기회에 확실히 알고 넘어가자!!

 

우리가 파이썬을 실행할때 python test.py 이런식으로 파이썬을 실행한다.

print.py

print.py이라는 모듈을 만들어 함수를 하나 만들어두고, 함수 밖에 print를 하나 더 넣었다.

이걸 test.py에서 블러온 뒤 hi 함수를 실행 해보자!

test.py

이렇게 하면 하이요 라는 것이 출력될 것이다.

근데 막상 실행해보니 하이요만 나온 것이 아니라 바이요도 나왔다.

그리고 심지어 바이요가 먼저 나왔다.

 

여기서 확인할 수 있듯이

 

파이썬의 import 구문은 다른 파이썬 소스나 패키지 혹은 파이썬 라이브러리의 기능 전체 혹은 일부를 현재 프로그램 코드 문맥을 가져오는 일을 한다. import print라고 하면 print.py 파일에 있는 내용 전체를 print라는 모듈로 현재 프로그램으로 가져온다는 뜻이다.

 

import의 동작방식

import로 다른 모듈을 반입하게 되면 파이썬 해석기(인터프리터)는 모듈이나 패키지 이름에 기반하여 해당 모듈의 이름으로 되어 있는 디록토리나 파일을 찾기 시작한다. 해당 모듈의 파일을 찾았다면, 우선 해당 파일을 한 번 컴파일 하여 바이트코드 모듈로 만든다. 이 과정은 해당 모듈의 파일을 처음부터 끝까지 읽어서 실행하는 것과 동일하다. 따라서 print.py 파일은 import print를 수행하는 시점에 완전하게 로드되어 실행된다. 그래서 실제 우리가 원하는 동작을 하기 전에 해당 소스코드에 들어있는 내용이 전부 실행되는 것이다.

 

 

그래서 먼저 import한 print에 있는 내용이 전부 ~ 실행이 되어 '바이요'가 나온 것이고, 우리가 test.py에서 hi를 출력했기 때문에 '하이요'가 나온 것이다.

이를 방지하기 위해서 나온 것이

 

if __name__ == __main__이 조건문이다. __name__은 파이썬 내부에 설정 되어있는 변수라고 한다.

 

print.py

이렇게 바꾼 뒤 다시 test.py에서 실행시켜보자 test.py는 아무 것도 변한게 없다.

우리가 import해서 모듈로 사용할 경우에 print.py의 __name__에는 print라는 이름이 들어간다.

반대로 print.py를 실행시켜보자

 

이번에는 __name__에 __main__이 들어온 걸 알 수 있다. 따라서 

if __name__ == __main__의 뜻은 직접 실행이 되었을 때만 실행이 되도록 하는 것이다.