프로그래밍에서 가드(Guard) 란 특정 조건을 만족할 때만 코드가 실행되도록 막아주는 장치입니다. 경비원이 조건을 확인하고 통과시키는 것과 같습니다.
if __name__ == "__main__":
run()
이 코드가 대표적인 가드 패턴입니다. "직접 실행할 때만 run()을 호출해라" 라는 조건을 걸어두는 것입니다.
__name__이란?__name__은 Python이 자동으로 제공하는 특수 변수로, 파일이 어떤 방식으로 실행되느냐에 따라 값이 달라집니다.
# 직접 실행할 때
python my_module.py
__name__ # → "__main__"
# 다른 파일에서 import 될 때
import my_module
__name__ # → "my_module" (파일 이름)
Python 파일은 두 가지 방식으로 실행될 수 있습니다.
# 방식 1 — 직접 실행
python my_module.py
# 방식 2 — 다른 파일에서 import
import my_module
가드가 없으면 import 순간 실행 코드가 바로 돌아버립니다.
# 가드 없이
def run():
print("실행!")
run() # import 하는 순간 바로 실행돼버림 ❌
# main.py에서
import my_module # → "실행!" 출력됨 — 의도하지 않은 동작!
가드가 있으면 import 시에는 실행되지 않습니다.
# 가드 있으면
def run():
print("실행!")
if __name__ == "__main__":
run()
# 직접 실행
python my_module.py # → "실행!" 출력됨 ✅
# import
import my_module # → 아무것도 출력 안됨 ✅
__name__ 직접 확인해보기# my_module.py
print(f"__name__ = {__name__}")
if __name__ == "__main__":
print("직접 실행됨!")
# 직접 실행
python my_module.py
# → __name__ = __main__
# → 직접 실행됨!
# import
import my_module
# → __name__ = my_module
# → (if 블록 실행 안됨)
| 상황 | __name__ 값 | if 블록 실행 여부 |
|---|---|---|
직접 실행 (python my_module.py) | "__main__" | 실행됨 |
import (import my_module) | "my_module" | 실행 안됨 |
한 줄 요약:
if __name__ == "__main__"은 "이 파일을 직접 실행할 때만 아래 코드를 실행해라"라는 가드로, import 시 의도하지 않은 실행을 막아줍니다.