WjExplor Story

if __name__ == "__main__" 정리 본문

Python/Python : Code Study

if __name__ == "__main__" 정리

더블유제이플로어 2025. 9. 12. 16:29

## 1. `__name__` 이란 무엇일까?


파이썬에서 `__name__`은 특별한 내장 변수입니다. 파이썬 인터프리터가 코드를 실행할 때 자동으로 이 변수에 값을 할당해 줍니다. 이 값은 파이썬 파일(.py)이 어떻게 사용되느냐에 따라 달라집니다.

- 직접 실행될 때: 해당 파일을 터미널에서 `python my_script.py` 와 같이 직접 실행하면, 그 파일 안에서 `__name__` 변수의 값은 `"__main__"` 이라는 문자열이 됩니다.
- 모듈로서 가져올 때(import): 다른 파이썬 파일에서 `import my_script` 와 같이 모듈로 가져와서 사용하면, `my_script.py` 파일 안에서 `__name__` 변수의 값은 그 파일의 이름인 `"my_script"` 가 됩니다.

## 2. `if __name__ == "__main__"` 의 역할

이 조건문은 **"이 파이썬 파일이 터미널에서 직접 실행되었을 때만, 이 블록 안의 코드를 실행하라"** 라는 의미입니다.
다른 파일에서 모듈로 가져와서 사용할 때는 이 조건문이 거짓(False)이 되므로, 블록 안의 코드는 실행되지 않습니다.

### 왜 사용할까?

이 구문은 주로 두 가지 목적으로 사용됩니다.

1.  **모듈 테스트용 코드 작성**: 내가 만든 모듈(함수나 클래스 등)이 잘 작동하는지 테스트하는 코드를 작성할 때 유용합니다. 이 테스트 코드는 모듈이 다른 곳에서 `import` 될 때는 실행되지 않아야 합니다.
2.  **프로그램의 시작점(Entry Point) 지정**: 여러 파일로 구성된 프로젝트에서, 어떤 파일이 메인 프로그램으로서 실행되어야 하는지를 명확하게 나타냅니다.


## 3. 예시 코드로 이해하기


두 개의 파이썬 파일을 만들어 직접 확인해 보겠습니다.

`my_module.py` 파일:
(함수를 가지고 있으며, 자체적으로 테스트 코드도 포함하는 모듈)

# my_module.py

def greet(name):
    """입력받은 이름에게 인사하는 함수"""
    print(f"안녕하세요, {name}님!")

print(f"my_module.py의 __name__ 변수 값: {__name__}")
print(__name__)

# 이 파일이 직접 실행될 때만 아래 코드가 동작합니다.
if __name__ == "__main__":
    print("my_module.py 파일을 직접 실행했습니다.")
    print("모듈 테스트를 시작합니다.")
    greet("파이썬")

 

'main_program.py' 파일 : 
(`my_module.py`를 가져와서 사용하는 메인 프로그램 )

# main_program.py

# my_module을 임포트합니다.
# 이 때 my_module.py 안에 있는 코드들이 한 번 실행됩니다.
import my_module

print(__name__)

print(f"main_program.py의 __name__ 변수 값: {__name__}")

print("\nmain_program.py에서 my_module의 함수를 호출합니다.")
my_module.greet("사용자")

 

### 실행 결과 확인

`my_module.py`를 직접 실행할 경우:

터미널에 `python my_module.py`를 입력하면 다음과 같은 결과가 나옵니다.

```
__main__
my_module.py의 __name__ 변수 값: __main__
my_module.py 파일을 직접 실행했습니다.
모듈 테스트를 시작합니다.
안녕하세요, 파이썬님!
```

`__name__`이 `__main__`이므로 `if` 블록 안의 코드가 실행되었습니다.

`main_program.py`를 실행할 경우:**

터미널에 `python main_program.py`를 입력하면 다음과 같은 결과가 나옵니다.


```
my_module
my_module.py의 __name__ 변수 값: my_module
main_program.py의 __name__ 변수 값: __main__

main_program.py에서 my_module의 함수를 호출합니다.
안녕하세요, 사용자님!
```

`main_program.py`를 실행하면, `import my_module` 라인에서 `my_module.py` 코드가 실행됩니다. 이때 `my_module.py` 안의 `__name__` 변수는 `my_module`이므로, `if` 블록 안의 코드는 실행되지 않습니다.

이처럼 `if __name__ == "__main__"` 구문을 사용하면 모듈의 재사용성을 높이고 코드를 더 깔끔하게 구성할 수 있습니다.