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 |