Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 if __name__ == '__main__':은 무슨 의미일까?


파이썬에서 if __name__ == '__main__':은 무슨 의미일까?

파이썬 인터프리터가 소스 파일을 읽으면, 파일 안에 포함된 모든 코드를 위에서부터 차례대로 실행합니다.

그런데 본격적으로 코드를 실행하기 전에, 인터프리터는 몇 가지 특수 변수(special variables)를 먼저 정의합니다. 그중 하나가 바로 __name__입니다.

  • 직접 실행한 경우: 파이썬 인터프리터가 해당 모듈(소스 파일)을 메인 프로그램으로 실행하면, __name__ 변수에 '__main__'이라는 값이 설정됩니다.
  • 임포트된 경우: 다른 모듈에서 이 파일을 가져와 사용하면, __name__에는 모듈 자신의 이름(파일명)이 설정됩니다.

이 패턴이 필요한 이유

개발자가 작성한 모듈(.py 파일)은 두 가지 방식으로 사용될 수 있습니다. 터미널에서 직접 실행할 수도 있고, 다른 모듈에서 import 하여 함수나 클래스를 재사용할 수도 있습니다.

if __name__ == '__main__': 조건문을 활용하면 다음과 같은 장점이 있습니다.

  • 모듈을 프로그램으로 직접 실행할 때만 원하는 코드(메인 로직, 테스트 코드 등)를 실행할 수 있습니다.
  • 누군가 단순히 모듈을 임포트해서 함수를 호출하는 경우에는 불필요한 코드가 실행되지 않습니다.

예제로 살펴보기

one.py와 two.py라는 두 개의 파일이 있다고 가정해 보겠습니다.

one.py

def func():
    print('func() 함수가 one.py에서 호출되었습니다')

print('one.py의 최상위 코드 실행')

if __name__ == '__main__':
    print('one.py가 직접 실행되었습니다')
else:
    print('one.py가 다른 모듈에서 임포트되었습니다')

two.py

import one

print('two.py의 최상위 코드 실행')
one.func()

if __name__ == '__main__':
    print('two.py가 직접 실행되었습니다')
else:
    print('two.py가 다른 모듈에서 임포트되었습니다')

실행 결과 비교

먼저 one.py를 직접 실행해 보겠습니다.

$ python one.py

출력 결과는 다음과 같습니다.

one.py의 최상위 코드 실행
one.py가 직접 실행되었습니다

이번에는 two.py를 실행해 보겠습니다.

$ python two.py

출력 결과는 다음과 같습니다.

one.py의 최상위 코드 실행
one.py가 다른 모듈에서 임포트되었습니다
two.py의 최상위 코드 실행
func() 함수가 one.py에서 호출되었습니다
two.py가 직접 실행되었습니다

출력 결과에서 알 수 있듯이, two.py를 실행하면 import 문에 의해 one.py의 최상위 코드가 먼저 실행되지만, one.py의 if __name__ == '__main__': 블록 안에 있는 코드는 건너뛰어집니다. 이는 one.py가 '직접 실행'된 것이 아니라 '임포트'되었기 때문입니다.

핵심 정리

  • 파이썬은 코드를 실행하기 전에 __name__ 같은 특수 변수를 정의합니다.
  • 파일을 직접 실행하면 __name__은 '__main__'이 되고, 임포트되면 모듈 이름이 됩니다.
  • 이 차이를 활용하면 스크립트로 실행될 때만 동작하는 코드를 깔끔하게 분리할 수 있으며, 재사용 가능한 모듈을 작성하는 파이썬의 표준적인 관례(idiom)로 널리 사용됩니다.