if name == main :
__name__의 의미
python 자료구조를 공부하던 도중 예시 코드에서
if __name__ == "__main__" :
이런 알 수 없는 부분을 볼 수 있었다.
분명 __name__ 변수는 생성 되지 않았는데 어떤 의미일까 해서 공부해봤다.
__name__ 란 ?
우선 __name__ 변수는 파이썬의 interpreter가 만들어낸 글로벌 변수이다.
항상 존재하며 이 변수에는 실행된 모듈의 이름이 담긴다.
만약 모듈 자체에서 해당 코드를 실행하면 __name__ 변수에 __ main__ 값을 준다.
외부에서 import를 통해 실행 되었다면 __name__ 변수에 해당 모듈의 파일명이 담긴다.
이렇게 글로만 보면 이해가 잘 안되니 코드를 통해 알아보자.
코드
변수명의 변화를 보기 위해 두 개의 모듈을 만들어보자.
# jungho 모듈 (jungho.py)
def JHsum(a,b):
return a+b
print("jungho 모듈 실행")
print(__name__)
print("jungho 모듈 종료")
우선 정호 모듈을 직접 실행하게 되면
jungho 모듈 실행
__main__
jungho 모듈 종료
라고 출력 된다.
두번째 모듈을 만들어보자
# temp 모듈 (temp.py)
import jungho as jh
print (__name__)
print(jh.JHSUM(1,2))
위 모듈을 실행하게 되면
jungho 모듈 실행
jugnho
jungho 모듈 종료
__main__
3
이렇게 출력된다. 사용자는 jungho 모듈의 JHsum 함수를 사용하기 위해 import 했을 뿐인데 jungho 모듈에 존재하는 모든 코드가 실행 되는 것이다.
왜 이런 것일까 ??
python의 시작점
python은 처음에 개발 될 당시에 리눅스/유닉스 환경에서 사용하는 스크립트 언어 기반으로 개발되었다.
보통 리눅스/유닉스의 스크립트 파일은 하나로만 이루어진 경우가 많았어서 시작점을 따로 필요하지 않았다.
이런 이유로 python 은 java나 c 와 다르게 main함수로 시작점을 구분하는 기능이 없다.
그래서 스크립트 파일이 시작점이 될 수 있고 모듈이 시작점이 될 수도 있고 import를 하게 되면 해당 모듈을 시작점으로 해서 모든 코드를 실행해 버리는 것이다.
그렇다면 어떻게 시작점을 정해야 할까
__name__ 사용법
단일의 스크립트 파일을 실행하는 것이 아닌 여러 모듈을 만들고 사용할 때는 __name__(이하 ‘네임변수’) 를 사용하여 시작점을 정하는 것이 일반적이다.
정확히는 모듈에 네임변수를 이용하여 시작점이 될 수 없도록 만들어 주는 것이다.
기존의 jungho 모듈을 네임변수를 이용해 전체 코드가 실행되지 않게 해보자
# jungho 모듈 (jungho.py)
def JHsum(a,b):
return a+b
if __name__ == '__main__ ':
print("jungho 모듈 실행")
print(__name__)
print("jungho 모듈 종료")
이렇게 수정해준다면 jungho 모듈을 스크립트 파일로서 직접 실행 했을때는 네임변수에 main 의 값을 가지게 되니 if문에 속한 코드들도 실행이 될 것이다.
모듈로서 사용한다면 네임변수에 jungho 의 값을 가지니 해당 부분은 실행되지 않고 원하는 것처럼 함수만 사용하게 될 수 있는 것이다.
댓글남기기