03. Import 심화 (__name__의 비밀)
"
import는 단순히 코드를 가져오는 것이 아니라, '누가 주인공인가?'를 따지는 과정이기도 합니다."
모듈을 만들다 보면 필연적으로 마주치는 이상한 코드 덩어리가 있습니다.
바로 if __name__ == "__main__": 입니다.
1. 숨겨진 비밀: __name__
파이썬 파일들은 실행될 때 자기 자신의 이름(__name__)을 가집니다.
파일이 어떻게 실행되느냐에 따라 이 이름표가 바뀝니다.
| 상황 | 역할 | __name__ 값 |
비유 |
|---|---|---|---|
직접 실행 (python a.py) |
주인공 (Main) | "__main__" |
내가 직접 무대에 설 때 |
import 됨 (import a) |
조연 (Module) | "a" (파일이름) |
남의 무대에 불려 갔을 때 |
2. 시각화 (Mental Model)
이 코드는 일종의 "신분 확인 검문소"입니다.
graph TD
Start("파일 실행 시작") --> Check{"__name__ 값이 무엇인가?"}
Check --"__main__"--> MainRun["🚀 직접 실행 모드"]
MainRun --> RunCode["테스트 코드 실행 O"]
Check --"파일명"--> ModuleRun["📦 임포트 모드"]
ModuleRun --> SkipCode["테스트 코드 실행 X"]
ModuleRun --> OnlyFunc["함수 정의만 제공"]
style MainRun fill:#e8f5e9,stroke:#2e7d32
style ModuleRun fill:#e3f2fd,stroke:#1565c0
3. 왜 필요한가요? (안전장치)
여러분이 calculator.py를 만들면서, 잘 동작하는지 확인하려고 맨 아래에 테스트 코드를 짰다고 가정해봅시다.
그런데 다른 친구가 main.py에서 import calculator를 하는 순간,
친구의 화면에도 30이 출력되어 버립니다. (import는 파일을 한 번 훑으면서 실행하기 때문입니다.)
이런 민폐(Side Effect)를 막기 위해 "내가 주인공일 때만 실행해!"라는 조건문을 다는 것입니다.
# calculator.py (수정 버전)
def add(a, b):
return a + b
# 🛡️ 안전장치: 직접 실행할 때만 작동해라!
if __name__ == "__main__":
print("테스트 실행 중입니다...")
print(add(10, 20))
이제 친구가 import calculator를 해도 함수만 가져가고, 밑의 테스트 코드는 실행되지 않습니다.
AI와 협업 포인트
ChatGPT나 Gemini에게 "파이썬 스크립트 짜줘"라고 하면, 거의 항상 마지막에 if __name__ == "__main__": 블록을 만들어줍니다.
- "아, AI가 코드를 모듈화해서 깔끔하게 짜줬구나"라고 생각하면 됩니다.
- 여러분이 실행하고 싶은 메인 로직은 저
if문 아래에(주로main()함수 안에) 넣으면 됩니다.
4. 요약
import: 남의 코드를 조용히 가져오기만 해야 함. (시끄럽게 프린트하거나 실행하면 안 됨)if __name__ == "__main__": "지금 내가 메인 주인공이야?"라고 물어보는 질문.- 결론: 모듈로 쓸 파일에는 테스트 코드나 실행 로직을 반드시 이 조건문 안에 넣으세요.
코드 구조화(함수, 모듈)까지 익히셨다면, 이제 대량의 데이터를 다룰 준비가 되었습니다. AI가 세상을 이해하는 언어인 행렬과 텐서를 배우러 가봅시다.