if __name__ == "__main__":

Jeffrey·2022년 4월 13일

Python

목록 보기
1/2

​ 파이썬 코드를 보다 보면 가끔 if __name__ == "main":를 보게 되는데, 그 의미에 대해서 한 번 생각해보자. 먼저 name 이라는 것은 인터프리터가 실행되기전 만들어 놓는 글로벌 변수이며, 그 변수의 값으로는 main 혹은 모듈의 이름이 들어간다. (여기서 모듈이란 함수나 변수 또는 클래스를 모아 놓은 파일을 말하며, 모듈은 다른 파이썬 프로그램에서 import하여 사용할 수 있게끔 만든 파이썬 파일이라고도 할 수 있다.) 다시말해, 파이썬 인터프리터가 최초로 실행한 스크립트 파일의 name에는 'main'이 들어가며 모듈로써 실행되는 파일의 name에는 해당 모듈의 이름이 들어가는 것이다. 다음의 예를 통해서 이 말의 의미를 정확하게 이해할 수 있을 것이다.

먼저 하나의 파이썬 파일만 있는 경우만 생각해보도록 하자.

# jaeyi.py
print('jaeyi.py의 __name__:', __name__)    # jaeyi.py의 __name__에 할당되어 있는 변수를 출력
# 실행 결과
jaeyi.py의 __name__: __main__

하나의 파이썬 파일을 실행시키면 해당 파일이 최초로 실행된 스크립트 파일이으로 해당 파일의 name의 값에는 'main'이 할당된다.

다음으로는 하나의 파이썬 파일(main.py)에서 다른 파이썬 파일(junho.py)을 import하는 경우를 살펴보도록 하자.

# junho.py
print('junho 모듈 시작')
print('junho.py의 __name__:', __name__)    # junho.py의 __name__에 할당되어 있는 변수를 출력
print('junho 모듈 끝')
# main.py
import junho # junho 모듈을 import

print('main.py의 __name__:', __name__)    # main.py의 __name__에 할당되어 있는 변수를 출력

위와 같이 두 개의 파이썬 파일을 만든 다음, main.py 내에서 junho 모듈을 import하고 main을 실행시키면 아래와 같은 결과가 나오게 된다.

# 실행 결과
junho 모듈 시작
junho.py의 __name__: junho
junho 모듈 끝
main.py의 __name__: __main__

위의 결과에서 처럼 최초로 실행한 파일의 name에는 'main'이 들어가고, 모듈로 import한 파일의 name에는 해당 모듈의 이름이 들어가는 것을 확인할 수 있다.

그렇다면 이러한 이해를 바탕으로 왜 if name == "main": 구문이 필요한지 살펴보도록 하자.

# operations.py
def add(a,b):
    sum = a + b
    return sum
 
if __name__ == "__main__":
    print(add(10,20))
# main.py
from operations import add

print(add(20,30))
# 실행 결과1: operations.py를 실행시킨 경우
30
# 실행 결과2: main.py를 실행시킨 경우
50

만약 위와 같은 두 개의 파이썬 파일이 있을 때, operations.py만 실행시키게 되면 add(10,20)의 결괏값 30을 출력하지만 main.py에서 operations을 import하여 사용하게 되면 operations.py내의 name은 더 이상 main이 아니기 때문에 if name == "main": 내의 함수를 실행시키지 않고 add(20,30)만 실행하여 50의 결과를 출력하게 된다.

​ 이와 같이 if name == "main": 문은, 해당 파일이 처음 실행이 시작되는 파일일 경우에만 실행하고 import되어 모듈로써 사용될 때에는 실행되지 않도록 하고 싶은 동작이 있을 경우에 이용하도록 한다.

profile
Researching Developer

0개의 댓글