본문 바로가기
Python 기초

파이썬에서의 __name__과 main 사용법: 모듈과 스크립트 이해하기

by LINDSEY_ 2024. 2. 7.
반응형

`main.py` 파일과 `if __name__ == "__main__":` 구문의 사용은 파이썬에서 매우 중요한 개념입니다. 이를 이해하기 위해, 파이썬에서의 모듈과 스크립트의 개념부터 시작해서, `__name__`이라는 특별한 변수와 이를 사용하는 방법에 대해 알아보겠습니다. 이해를 돕기 위해 간단한 실습 예제도 포함할게요.

 

모듈과 스크립트의 차이

 

파이썬에서 모듈은 파이썬 코드를 담고 있는 파일을 말합니다. 함수, 클래스, 변수 등을 포함할 수 있으며, 다른 파이썬 파일에서 `import` 구문을 통해 재사용할 수 있습니다. 예를 들어, `math` 모듈은 수학적 연산을 위한 함수와 변수를 포함하고 있습니다.

스크립트는 직접 실행되는 파이썬 파일을 말합니다. 스크립트는 독립적으로 실행될 수 있으며, 사용자가 특정 작업을 위해 실행하는 파일입니다. 모든 스크립트는 모듈이 될 수 있지만, 모든 모듈이 스크립트는 아닙니다.

 

`__name__`과 `__main__`

 

파이썬에서 `__name__`은 현재 모듈의 이름을 담고 있는 내장 변수입니다. 파일을 직접 실행할 경우, `__name__`은 `"__main__"`으로 설정됩니다. 하지만 다른 파일에서 모듈로서 `import`될 경우, `__name__`은 해당 모듈의 파일명(확장자 없이)으로 설정됩니다.

이 특성을 이용해, 다음과 같은 구문을 자주 사용합니다:

 

if __name__ == "__main__":
    main()

 

이 구문의 목적은 해당 파일이 직접 실행될 때만 특정 코드(대부분 `main()` 함수)를 실행하도록 하는 것입니다. 이는 모듈이 다른 파일에 의해 `import`되어 사용될 때는 그 코드를 실행하지 않게 하려는 목적이 있습니다. 이 구분은 파이썬에서 매우 유용하며, 여러 목적으로 활용됩니다:

1. 재사용성 향상: 코드를 모듈로 작성하면, 다른 파이썬 스크립트에서 함수나 클래스 등을 임포트하여 재사용할 수 있습니다. `if __name__ == "__main__":`을 사용하면, 모듈이 다른 파일에 의해 임포트될 때는 실행되지 않아야 하는 코드(예: 테스트 코드, 데모 실행 코드 등)를 걸러낼 수 있습니다.

2. 독립적 실행 지원: 동일한 파일이 필요에 따라 모듈로 사용되거나 독립적인 프로그램으로 실행될 수 있습니다. 이 구문을 사용함으로써, 파일을 직접 실행했을 때만 특정 함수를 실행하게 하여 스크립트로서의 기능을 할 수 있게 합니다.

3. 네임스페이스 관리: 파일이 모듈로 임포트될 때, 그 안에 정의된 함수나 변수들은 임포트한 파일의 네임스페이스에 포함됩니다. 이 때, `if __name__ == "__main__":` 내부에 작성된 코드는 실행되지 않기 때문에, 불필요한 실행을 방지하고 네임스페이스를 깔끔하게 유지할 수 있습니다.

4. 테스트와 디버깅 용이성: 개발자는 이 구문을 사용하여 스크립트나 모듈의 테스트 코드를 작성할 수 있습니다. 이렇게 하면, 모듈이 임포트될 때는 테스트 코드가 실행되지 않으면서도, 파일을 직접 실행시켰을 때는 테스트 코드를 쉽게 실행할 수 있어 개발과 디버깅 과정이 용이해집니다.

이러한 이유로, `if __name__ == "__main__":` 구문은 파이썬에서 권장되는 패턴 중 하나로, 코드의 유연성과 재사용성을 높이며, 동시에 명확한 실행 흐름을 제공합니다.

 

실습 예제

main.py

def main():
    print("Hello from main function")

if __name__ == "__main__":
    main()

 

이 파일을 직접 실행(`python main.py`)하면, "Hello from main function"이 출력됩니다. 이때 `__name__`의 값은 `"__main__"`이므로 `main()` 함수가 실행됩니다.

다른 파일에서 `main.py`를 모듈로서 임포트하면 어떻게 될까요? 예를 들어, `import main`을 실행하는 다른 파이썬 파일에서는 `main.py`의 `main()` 함수가 자동으로 실행되지 않습니다. 왜냐하면 이 경우 `__name__`의 값이 `"main"`이 되기 때문입니다. `import main`을 한 후에는 `main.main()`을 명시적으로 호출해야 `main()` 함수를 실행할 수 있습니다.

 

 

정리

- 모듈은 재사용 가능한 코드를 담고 있는 파일입니다.
- 스크립트는 직접 실행되는 파이썬 파일입니다.
- `__name__`은 현재 모듈의 이름을 담고 있는 변수입니다.
- 파일을 직접 실행할 경우 `__name__`은 `"__main__"`이 됩니다.
- `if __name__ == "__main__":` 구문을 사용하여 파일이 직접 실행될 때만 특정 코드를 실행하도록 할 수 있습니다.

이러한 개념을 이해하면, 파이썬 파일을 더 유연하게 작성하고 관리할 수 있게 됩니다. 다양한 상황에서 코드를 재사용하거나, 스크립트로 직접 실행하거나, 모듈로서 다른 파일에 포함시킬 때 이러한 방식을 적절히 사용할 수 있습니다.

 

반응형