아래의 구조를 당신은 설명할 수 있나요?
if __name__ == '__main__':
print_hi('PyCharm')
1. 한 줄 요약
이 파일이 다른 파일에 의해서 불러와진(import)것이 아니라, 사용자가 터미널이나 IDE에서 '직접 실행한 주인공 파일'일 때만
print_hi('PyCharm') 함수를 호출하라는 뜻입니다.
2. 구성 요소별 상세 설명
코드를 두 부분으로 나누어 세부적으로 해석하면 다음과 같다.
if __name__ == '__main__': (조건문)
- __name__ : 파이썬이 내부적으로 관리하는 숨겨진 내장 변수이다. 이 파일이 어떤 경로로 실행되었는지 알려주는 명찰 역할을 한다.
- __main__: 사용자가 스크립트 파일을 직접 실행했을 때 파이썬이 이 __name__ 명찰에 자동으로 붙여주는 특수한 값이다. 반대로 다른 파일에서 import를 했다면 파일 이름인 'script_name'이 들어간다.
결론: 따라서 이 조건문은 "지금 실행 중인 이 파일이 프로그램의 진입점(Entry Point)이 맞니?"라고 체크하는 것이다.
print_hi('PyCharm') (실행부)
- 위 조건이 참(Ture)일 때만 실행되는 로직이다. 'PyCharm'이라는 문자열 아규먼트를 print_hi 함수에 전달하여 실행한다.
3. 실무적 존재 이유 ( 왜 이렇게 쓸까?에 대한 의문)
만약 이 조건문 없이 print_hi('PyCharm')을 맨 밑에 적어두면, 다른 파일에서 이 파일의 특정 함수나 클래스를 쓰고 싶어서 import 하는 순간 원치 않는 print_hi 함수까지 자동으로 실행되어 버린다.
이를 방지하기 위해 "내가 직접 실행할 때만 작동하는 테스트 코드 혹은 메인 로직"임을 명시하는 파이썬의 표준 개발 컨벤션이다.
예시)
cal.py라는 파일에 더하기 함수와, 테스트용 코드를 작성함
# cal.py
def add(a, b):
return a + b
# 테스트를 해보고 싶어서 그냥 맨 밑에 호출해둠
print("테스트 결과:", add(3, 5))
# service.py
from cal import add
def run_service():
result = add(10, 20)
print("실제 서비스 결과:", result)
run_service()
service.py를 실행하면, 나는 분명 run_service()만 실행했는데 엉뚱하게 cal.py에 있던 '테스트 결과:8'이라는 메시지가 화면에 같이 출력되어 버린다. 파이썬은 import를 하는 순간 그 파일의 모든 코드를 위에서 아래로 한 번 쭉 실행하기 때문이다.
올바르게 하기 위해서는 다음과 같이 조건문을 추가하는 것이다.
# cal.py
def add(a, b):
return a + b
if __name__ == "__main__":
# 이제 이 테스트 코드는 cal.py를 직접 실행할 때만 동작합니다!
# service.py에서 import할 때는 실행되지 않고 건너뜁니다.
print("테스트 결과:", add(3, 5))
이는 웹 프레임워크(FastAPI, Flask 등)의 진입점을 지정하거나, 독립적인 스크립트 도구를 만들 때 코드의 모듈화를 위해 반드시 작성해야하는 필수 컨벤션이다.