[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))  # 테스트 코드는 실행 안 됨
    

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

    'Development > 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 : Iterator, Generator  (0) 2025.03.26
    Copyright 2024. GRAVITY all rights reserved