콘텐츠로 이동

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를 만들면서, 잘 동작하는지 확인하려고 맨 아래에 테스트 코드를 짰다고 가정해봅시다.

# calculator.py
def add(a, b):
    return a + b

# 테스트 코드 (내가 직접 실행할 때만 보고 싶음)
print(add(10, 20)) 

그런데 다른 친구가 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__": 블록을 만들어줍니다.

  1. "아, AI가 코드를 모듈화해서 깔끔하게 짜줬구나"라고 생각하면 됩니다.
  2. 여러분이 실행하고 싶은 메인 로직은 저 if문 아래에(주로 main() 함수 안에) 넣으면 됩니다.

4. 요약

  • import: 남의 코드를 조용히 가져오기만 해야 함. (시끄럽게 프린트하거나 실행하면 안 됨)
  • if __name__ == "__main__": "지금 내가 메인 주인공이야?"라고 물어보는 질문.
  • 결론: 모듈로 쓸 파일에는 테스트 코드나 실행 로직을 반드시 이 조건문 안에 넣으세요.

코드 구조화(함수, 모듈)까지 익히셨다면, 이제 대량의 데이터를 다룰 준비가 되었습니다. AI가 세상을 이해하는 언어인 행렬과 텐서를 배우러 가봅시다.

👉 4부: 데이터와 AI의 언어 보러가기