[python] if __name__ == "__main__" :
A A
728x90

Python 파일을 작성하다 보면 아래와 같은 구문을 자주 보게 된다.

if __name__ == "__main__":
    # 실행 코드

이 구문의 핵심은 이 파일이 직접 실행될 때만 특정 코드를 실행하겠다는 뜻이다.

1. __name__ 변수란?

모든 Python 파일에는 자동으로 __name__이라는 내장 변수가 존재한다.

  • 파일이 직접 실행되면 → __name__ == "__main__"
  • 파일이 import되면 → __name__ == "모듈이름"

2. 예제로 보기

# module_a.py
def say_hello():
    print("Hello!")

print("module_a의 __name__:", __name__)

if __name__ == "__main__":
    print("직접 실행됨!")
    say_hello()

▶ 직접 실행 시

python module_a.py
module_a의 __name__: __main__
직접 실행됨!
Hello!

▶ 다른 파일에서 import 시

# module_b.py
import module_a
module_a의 __name__: module_a

→ 즉, import 하면 if 블록은 실행되지 않음.

3. 왜 상속처럼 느껴질까?

이 구조가 마치 상속처럼 느껴질 수 있는 이유는,

  • 모듈 파일이 다른 파일에서 재사용되기 위해 설계되어 있고,
  • 직접 실행될 경우만 특정 동작(테스트, 실행 등)을 수행하기 때문이다.

즉, 마치 부모 클래스가 있고 자식 클래스가 특정 시점에 동작을 오버라이드하는 느낌과 비슷하게 느껴질 수 있다.

4. 정리

  • __name__은 파이썬이 자동으로 설정하는 변수
  • __main__은 직접 실행될 때만 나타남
  • if __name__ == "__main__" 블록은 테스트, 진입점 용도로 자주 사용

예시

# utils.py
def add(x, y):
    return x + y

if __name__ == "__main__":
    print("테스트:", add(2, 3))
# main.py
from utils import add
print(add(5, 6))  # 테스트 코드는 실행 안 됨

이렇게 하면 모듈을 깔끔하게 분리하고, 재사용과 테스트를 모두 관리할 수 있다.

'Developer > Python' 카테고리의 다른 글

[python] except raise assert  (0) 2025.05.16
[python] sys.path 와 sys.path.append()  (0) 2025.05.15
[python] math, random, platform  (2) 2025.05.15
[python] module, pakage  (1) 2025.05.14
python : 할당과 복사  (0) 2025.03.26
Copyright 2024. GRAVITY all rights reserved