파이썬에서 __name__은 특수한 내장 변수로, 모듈의 이름을 나타낸다. 이는 파이썬 코드가 직접 실행되는지 아니면 다른 모듈에 의해 임포트되는지 구분하는 데 사용된다. 이를 통해 스크립트를 직접 실행할 때와 모듈로 임포트할 때의 동작을 다르게 할 수 있다.
__name__의 기본 개념
직접 실행될 때: 파이썬 파일을 직접 실행하면, __name__ 변수의 값은 "__main__"이 된다.
임포트될 때: 다른 파일에서 해당 파일을 모듈로 임포트하면, __name__ 변수의 값은 모듈의 실제 이름(파일 이름)이 된다.
예제
다음은 __name__의 동작을 설명하는 예제이다.
mymodule.py
def greet(name):
return f"Hello, {name}!"
if __name__ == "__main__":
# 이 블록은 직접 실행될 때만 실행된다.
print(greet("Alice"))
main.py
import mymodule
print(mymodule.greet("Bob"))
실행 결과
mymodule.py를 직접 실행할 때:
$ python mymodule.py
Hello, Alice!
main.py를 실행할 때:
$ python main.py
Hello, Bob!
위 예제에서 mymodule.py는 직접 실행될 때와 main.py에 의해 임포트될 때 각각 다른 동작을 한다.
__name__ == "__main__"의 활용
__name__ == "__main__" 패턴은 다음과 같은 상황에서 유용하게 사용된다.
테스트 코드 작성: 모듈에 포함된 테스트 코드를 모듈의 끝 부분에 작성하고, 이 코드는 해당 모듈이 직접 실행될 때만 동작하게 할 수 있다.
모듈로서의 사용과 스크립트로서의 사용 구분: 모듈이 다른 코드에 의해 임포트될 때는 특정 코드를 실행하지 않도록 할 수 있다.
테스트 코드 작성 예시
def add(a, b):
return a + b
def multiply(a, b):
return a * b
if __name__ == "__main__":
# 테스트 코드
print("Testing add function:")
print(add(2, 3)) # 5
print(add(5, 7)) # 12
print("Testing multiply function:")
print(multiply(2, 3)) # 6
print(multiply(5, 7)) # 35
모듈로서의 사용 예시
utility.py
def greet(name):
return f"Hello, {name}!"
if __name__ == "__main__":
print(greet("Alice"))
app.py
import utility
print(utility.greet("Bob"))
이 경우, app.py를 실행하면 utility.py의 __name__ == "__main__" 블록 안의 코드는 실행되지 않고, greet 함수만 임포트되어 사용된다.