1 분 소요

__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 의 값을 가지니 해당 부분은 실행되지 않고 원하는 것처럼 함수만 사용하게 될 수 있는 것이다.

댓글남기기