본문 바로가기
파이썬/기초문법

Python if __name__ == '__main__': 에 대한 이해 / Python __name__

by 행복론자 2020. 4. 18.

Python 관련 책이나 코드를 보면 이런 코드를 종종 볼 수 있습니다.

if __name__ == '__main__':

 

 

이번 포스팅에서는 이 코드의 의미가 무엇이고 왜 있어야 하는지 알아 보겠습니다. 

간단하게 코드로 예를 들어 하나씩 정리해보면 

 

 

먼저 Python 모듈을 실행하면 아무것도 안해줘도 __name__에 __main__이라는 값이 들어갑니다. 

 

pizza.py

print('pizza1')
print('__name__ ', __name__)
print('pizza2')

 

 

실행하면 다음과 같은 결과가 나옵니다.

pizza1
__name__  __main__
pizza2

 

 

그럼 다른 모듈에서 import를 통해 pizza.py를 가져오면 __name__에는 뭐가 들어갈까요?

 

이번에는 chief라는 모듈을 만들어 실행해보겠습니다. 

 

chief.py 

import pizza

print('chief1')
print('__name__ ', __name__)
print('chief2')

 

 

그럼 다음과 같은 결과가 나옵니다.

pizza1
__name__  pizza
pizza2
chief1
__name__  __main__
chief2

 

 

여기서 알 수 있는 사실은 두가지입니다.

 

 

1.import pizza

import pizza를 하면 이것 자체로 pizza.py가 한 번 실행됩니다.

다른거 아무것도 안해도 그냥 한번 실행됩니다. 

 

 

2.__name__

pizza.py를 실행할 때는 __name__값이 __main__이었습니다. 

하지만 다른 모듈을 통해 호출될 때는 __name__값이 pizza입니다.

 

Python 모듈이 시작점일 때는 __name__값이 __main__이지만

다른 모듈에서 호출될 때는 __name__값이 Python 모듈명입니다.

 

 

그럼 이 코드를 넣는 이유는 무엇일까요?

if __name__ == '__main__':

 

 

바로 해당 파일이 시작점일 때만 실행하도록 만들고 싶어서 입니다.

무슨 말이냐면 예시를 조금 바꿔서

 

calculator.py

def add(a, b):
    return a+b


def divide(a, b):
    return a/b
    
a = add(5, 3)
print(a)

b = divide(4, 2)
print(b)

 

 

calculator라는 모듈을 만들어 함수를 정의해놓고 잘 실행되나 테스트해봤습니다. 잘 됩니다.

그 다음 다른 모듈에서 calculator를 사용하기 위해 import했다고 해보겠습니다.

 

student.py

import calculator

c = calculator.add(10, 3)
print(c)

 

 

실행 결과는 엉뚱합니다.

8
2.0
13

 

 

왜냐면 import calculator를 하는 순간 calculator.py가 한 번 실행되기 때문입니다.

이렇게 다른 모듈에 의해 import될 때 무조건 한 번 실행되는 경우를 막기 위해 아래 코드를 사용합니다.

if __name__ == '__main__':

 

 

calculator.py 코드를 조금 바꿔 보겠습니다. 

def add(a, b):
    return a+b


def divide(a, b):
    return a/b

if __name__ == '__main__':
  a = add(5, 3)
  print(a)

  b = divide(4, 2)
  print(b)

 

   

이렇게 바꾸면 if 절 밑에 코드는 오로지 calculator.py에 __name__이 __main__인 경우     

즉, 다른 모듈이 calculator.py를 호출할 때 말고

시작점이 calculator.py인 경우에만 실행되어 의도치 않은 결과를 막을 수 있도록 합니다. 

반응형
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글