Python: if __name__ == ‘__main__’ — 초보자용 가이드

1. 소개

Python 프로그램에서 흔히 볼 수 있는 "if **name** == '**main**'" 구문은 스크립트가 어떻게 실행되었는지를 판단하는 중요한 기능입니다. 이 구문을 사용하면 동일한 코드가 “직접 실행”되었는지, “다른 스크립트에서 import 되었는지”에 따라 다르게 동작할 수 있습니다.
이 기능을 올바르게 이해하면 코드 재사용성과 유지보수성을 향상시키고, 보다 효율적인 디버깅 및 테스트가 가능해집니다. 본 기사에서는 이 구문의 역할, 사용법, 장점 등을 구체적인 코드 예시와 함께 자세히 설명합니다.

2. 파이썬의 namemain에 대한 기본 이해

파이썬의 특수 변수 name이란?

파이썬 프로그램이 실행될 때 여러 특수 변수가 자동으로 생성됩니다. __name__은 그 중 하나로, 실행 중인 파일(모듈)의 이름을 저장합니다. 일반적으로 __name__ 변수는 프로그램이 어느 모듈에서 실행되었는지를 나타냅니다.

Note: 모듈과 스크립트의 차이
모듈: 다른 파일에서 import 되어 사용되도록 설계된 파이썬 코드 파일.
스크립트: 주로 프로그램으로 직접 실행되는 파이썬 파일로, 다른 파일에서 import 되기보다는 직접 실행됩니다.

예시: name의 동작

예를 들어, 다음과 같은 내용의 파일 example.py가 있다고 가정합니다.

# example.py
print(__name__)

이 파일을 직접 실행하면 __name__ 값이 '__main__'이 되고, 터미널에 다음과 같이 표시됩니다.

__main__

반면, 이 파일을 다른 파일에서 import 하면 __name__ 값은 'example'이라는 파일명으로 설정됩니다(__main__이 아님). 이는 스크립트 실행 방식에 따라 __name__ 값이 달라진다는 것을 보여줍니다.

main이란?

파이썬 인터프리터는 실행 중인 파일에 특수 이름 “__main__“을 부여합니다. 이를 통해 파이썬 프로그램은 “__main__“을 확인함으로써 스크립트가 직접 실행되고 있음을 판단할 수 있습니다.

侍エンジニア塾

3. if **name** == ‘**main**‘의 실용적 사용법

if **name** == ‘**main**‘ 구문을 사용하면 파이썬 스크립트를 직접 실행할 때만 특정 코드를 실행하도록 할 수 있습니다. 이 구문은 코드 동작을 보다 세밀하게 제어하는 데 매우 유용합니다.

기본 문법

if __name__ == '__main__':
    # Code that runs only when the script is executed directly
    print("This script is being run directly.")

구체적인 예시

아래는 calculate.py 파일을 예시로 든 코드입니다. 이 파일에는 함수와 조건문이 포함되어 있습니다.

# calculate.py
def add(a, b):
    return a + b

if __name__ == '__main__':
    result = add(3, 4)
    print("Calculation result:", result)

실행 결과

파일을 직접 실행하면 다음과 같은 출력이 나타납니다.

Calculation result: 7

반면, 이 calculate 모듈을 다른 파일에서 import 하면 if __name__ == '__main__' 아래의 코드는 실행되지 않습니다. 아래는 main_script.py에서 이를 import 하고 사용하는 예시입니다.

# main_script.py
import calculate

# When imported, the code under if __name__ == '__main__' in calculate.py is not executed
print(calculate.add(10, 5))  # 15 is printed

보시다시피, "if **name** == ‘**main**‘" 구문을 사용하면 스크립트를 직접 실행할 때와 다른 스크립트에서 import 할 때의 동작을 다르게 만들 수 있습니다.

4. 이 구문 사용의 장점

1. 모듈 재사용성 향상

if **name** == ‘**main**‘를 사용하면 모듈을 import 할 때 불필요한 코드가 실행되는 것을 방지하고, 필요한 부분만 실행하도록 제어할 수 있어 코드 유지보수성이 높아집니다.

2. 테스트 용이성

if __name__ == '__main__' 안에 테스트나 디버그 코드를 넣어두면 개발 중에 쉽게 테스트를 실행할 수 있습니다. 모듈이 import 될 때는 테스트 코드가 실행되지 않으므로 보다 효율적으로 디버깅할 수 있습니다.

테스트 코드 예시

calculate.py에 간단한 테스트를 추가해 보겠습니다.

# calculate.py
def add(a, b):
    return a + b

if __name__ == '__main__':
    # Test code
    print("3 + 4 =", add(3, 4))
    print("10 + 5 =", add(10, 5))

이와 같이 모듈이 직접 실행될 때만 간단한 테스트가 실행되도록 하면, 모듈이 다른 코드에 의해 임포트될 때는 테스트가 실행되지 않으며 필요한 함수만 사용됩니다.

年収訴求

5. 주의사항 및 모범 사례

주의사항

  1. 코드 가독성 향상 if __name__ == '__main__' 테스트 및 실행 코드를 이 지점 아래에 배치하여 파일 내 책임을 명확히 구분합니다. 임포트 시 실행되지 않아야 하는 부분은 조건문 안에 넣어 불필요한 코드가 실수로 실행되지 않도록 합니다.
  2. 순환 임포트 주의 if __name__ == '__main__' 를 사용하는 코드에서 여러 파일이 서로를 임포트하는 경우, 순환 임포트를 피하도록 주의합니다. 복잡한 모듈 의존성은 순환 임포트 위험을 높이므로 의존성을 가능한 단순하게 유지하세요.

모범 사례

  1. 테스트 코드를 메인 블록에 넣기 테스트 코드를 if __name__ == '__main__' 내부에 배치하면, 모듈이 다른 코드에 의해 임포트될 때 불필요한 실행을 방지할 수 있습니다. 테스트가 모듈이 직접 실행될 때만 실행되도록 함으로써 의도치 않은 동작을 예방합니다.
  2. 관련 함수들을 함께 그룹화 if __name__ == '__main__' 내부에서 관련 함수를 그룹화하고 필요에 따라 호출하면 코드가 간결해지고 읽기 쉬우며 유지보수가 더 간단해집니다.

6. 요약

“if name == ‘main‘” 구문은 파이썬 스크립트가 어떻게 실행되었는지를 판단하는 편리한 방법입니다. 이 구문을 사용하면 스크립트가 직접 실행될 때만 코드가 실행되도록 보장할 수 있어 모듈 재사용성을 높이고 테스트를 용이하게 합니다. 파이썬 프로그래밍 시 이 구문을 효과적으로 활용하고 스크립트와 모듈을 적절히 분리하여 코드 유지보수성과 재사용성을 향상시키세요.