[Python] __name__ 이란?

JEEWOO SUL·2021년 12월 7일
4

📂 기타

목록 보기
8/11

📌 모듈

__name__ 개념을 설명하기 전 Python에서 모듈이라는 개념을 이해해야 한다. 모듈은 함수, 변수, 클래스를 모아 놓은 파일이다. 즉, 다른 Python 프로그램에서 호출하여 사용할 수 있게끔 만든 파이썬 파일이다. 우리는 Python 프로그래밍을 할때 math, pandas 같은 굉장히 많은 모듈을 import하여 사용한다.

모듈을 생성하거나 호출하는 방법은 다른 블로그에서 많이 나와있으니 검색하길 바란다.

What is __name__?

.py 파일에는 __name__이라는 숨겨진 변수가 있다. 이 변수는 모듈의 이름을 가지고 있는 변수로, 현재 .py 파일의 이름을 가지고 있는 변수라는 의미이다. 예를 들어, jeewoo.py라면 jeewoo라는 문자열을 name변수가 가지고 있게 된다.

예시

import second 

my_name = __name__
print("first.py의 이름 :", my_name)

first.py에서 second.py를 import해서 프로그램을 실행하면 다음과 같은 결과가 출력된다. 참고로, Python에서 import로 모듈을 가져오면 해당 스크립트 파일이 한 번 실행된다. 따라서 second 모듈을 가져오면 second.py 안의 코드가 실행되는 것이다.

즉, first.py를 기준으로 프로그램을 실행하면 first.py의 name은 "main"이고 second.py의 name은 "second"가 들어가게 된다. 이와 반대로, second.py를 기준으로 실행하게 되면 second.py의 name은 "main"이 된다.

결과적으로, 직접 실행된 파일의 name은 "main"이 되고 import되서 모듈로 사용된 파일의 name은 모듈이름이 된다.

이를 통해, 어떤 스크립트 파일이든 Python 인터프리터가 최초로 실행한 스크립트 파일의 name에는 'main'이 들어간다. 이는 프로그램의 시작점이라는 뜻이다.

🙄 왜 사용할까?

그럼 왜 name을 사용하는 것일까?

파이썬은 최초로 시작한 스크립트 파일과 모듈의 차이가 없기 때문에 어떤 스크립트 파일이든 시작점도 될 수 있고 모듈도 될 수 있다. 그래서 name 변수를 통해 현재 스크립트 파일이 시작점인지 모듈인지 판단한다.

if __name__ == '__main__':
	...

이 코드는 현재 스크립트 파일이 프로그램의 시작점이 맞는지 판단하는 작업이다. 결론은 스크립트 파일이 메인 프로그램으로 사용될 때와 모듈로 사용될 때를 구분하기 위한 용도이다.

✔ Python은 왜 프로그램의 시작점이 정해져 있지 않을까?

Python이 처음 개발될 당시에 Linux/Unix에서 사용하는 스크립트 언어 기반이었기 때문에 프로그램의 시작점이 따로 정해져 있지 않았다. 보통 Linux/Unix의 스크립트 파일은 파일 한 개의 이루어진 경우가 많은데, 이 스크립트 파일 자체가 하나의 프로그램이다 보니 시작점이 따로 필요하지 않았었다. 하지만 C나 Java의 경우에는 초기에 소스 파일을 여러개 사용했기 때문에 여러 소스 파일의 함수 들 중에서도 시작 함수(main)을 따로 정해놓았었다.

profile
느리지만 확실하게 🐢

0개의 댓글