무향향수

[Python] if __name__ == "__main__" 의미 본문

인턴일기/공부내용

[Python] if __name__ == "__main__" 의미

튼튼한장 2024. 9. 27. 09:59

파이썬 코드를 살펴보면

if __name__ == "__main__":
	# ...

 

대부분 위와 같은 형식으로 코드가 작성되어 있는 것을 확인할 수 있다.

처음에는 python에서는 메인 함수를 저런 식으로 호출하나보다 하고 그냥 넘기고 잘 사용하지 않았다.

그러나 인턴 업무를 하며 코드를 하나씩 이해하던 도중 자주 발견 되어 제대로 알고 사용하고자 정보를 찾아보았다.

 


코드의 역할 ! 

우선 해당 코드의 역할은 크게 두 가지가 있다.

1. 모듈과 스크립트 구분 📏

파이썬에서는 코드가 *모듈로 임포트될 때와 *스크립트로 직접 실행될 때 서로 다른 방식으로 실행된다.

여기서 __name__ 은 현재 모듈의 이름을 나타내는 변수이다.

만약 스크립트가 직접 실행되면 __name__ 값은 "__main__"이 된다.

그러나 다른 모듈에서 임포트될 경우 __name__은 해당 모듈의 이름이 된다.

 

예시) 만약 파이썬 스크립트(test.py)를 직접 실행하면 __name__의 값은 "__main__"이 된다.

그러나 이 스크립트를 다른 모듈(another.py)에서 임포트하면 __name__값은 해당 모듈의 이름, 즉 "test"가 된다!

 

모듈(module): 하나의 파이썬 파일(.py파일), 스크립트 또는 다른 모듈에 import 되는 프로그램 파일 (함수, 클래스, 변수 정의)

예) math, os, sys와 같은 표준 라이브러리 모듈이나 사용자가 만든 사용자 정의 모듈이 있다.

스크립트(script): 특정 작업을 수행하기 위해 작성된 파이썬 코드(.py). 일회성 작업, 자동화 프로세스에 사용된다.

-> 모듈은 스크립트와 달리 단독으로 실행은 불가능하다는 차이점이 있다.

속성 모듈(module) 스크립트(script)
목적 기능 재사용 특정 작업 수행
사용 import로 다른 코드에서 사용 직접 실행 가능
구성 함수, 클래스, 변수 포함 주로 실행 로직 포함
진입점 없음 if __name__ == "__main__": 사용

 

2. 조건문 역할 🤷

if __name__ == "__main__":

조건문은 스크립트가 직접 실행될 때만 그 안에서 코드를 실행하게 한다.

따라서 다른 모듈에서 이 스크립트를 임포트해도 if __name__ == "__main__": 아래의 코드는 실행되지 않는다.

 


 

왜 사용할까?

1. 재사용성 🗑️

다른 스크립트에서 이 모듈을 임포트하여 사용할 때, 메인 블록에 있는 코드는 실행되지 않으므로 이 모듈의 함수나 클래스를 안전하게 사용할 수 있다.

 

2. 테스트 용이성 😎

모듈이 다른 모듈에서 사용될 때와 독립적으로 실행될 때의 동작을 명확하게 구분할 수 있다. 이를 통해 테스트와 디버깅이 쉬워진다.

 

3. 코드의 명확성 ✨

스크립트가 직접 실행될 때 어떤 동작이 수행될지를 명시적으로 보여주므로 코드의 가독성이 향상된다.


사용 예시 💫

    
이 스크립트를 실행하면 main함수 내용과 "이 스크립트가 직접 실행되었습니다." 문장이 출력된다.

# test_main.py
def main():
	print("안녕하세용!")
    
if __name__ == "__main__":
	main()
    print("이 스크립트에서 직접 실행되었습니다.")


한편 다른 모듈에서 test_main.py를 import 후 test_main.main() 함수를 실행하면
main함수의 내용만 출력된다.

# test_import.py
import test_main

print(test_main.main())

 

이제 if __name__ == "__main__": 의기능과 사용방법을 알게 되었으니 잘 사용하면 되겠다~!