본문 바로가기
Python/기초

[파이썬/Python 기초] __name__ 에 대해 알아보자.

by 모두의 케빈 2023. 7. 2.

저번 시간에는 모듈, 패키지, 라이브러리, 프레임워크에 대한 개념과 직접 코드로 구현해 봤습니다. 이번 시간에는 파이썬 파일의 숨겨진 __name__ 변수에 대해 알아보도록 하겠습니다.

모듈, 패키지, 라이브러리, 프레임워크의 개념에 대해 잘 모르시는 분들께서는 아래 글을 먼저 읽어주세요.

[파이썬/Python 기초] 모듈, 패키지, 라이브러리, 프레임워크의 차이

 

[파이썬/Python 기초] 모듈, 패키지, 라이브러리, 프레임워크의 차이

모듈, 패키지, 라이브러리, 프레임워크의 차이는 무엇일까 모듈이 모이면 패키지가 되고, 패키지가 모이면 라이브러리가 됩니다. 모듈은 프로그램에서 어떤 기능을 하는 작은 단위이자 코드 덩

kevinitcoding.tistory.com

 

모듈과 패키지를 직접 구현해 보는 실습 코드가 궁금하신 분들은 아래 글을 읽어주세요.

[파이썬/Python 기초] 모듈과 패키지를 코드로 직접 구현하기

 

[파이썬/Python 기초] 모듈과 패키지를 코드로 직접 구현하기

저번 시간에는 모듈, 패키지, 라이브러리, 프레임 워크에 대한 개념을 살펴봤습니다. 이번 시간에는 모듈과 패키지를 직접 코드로 구현하면서 실습해 보는 시간을 갖도록 하겠습니다. 혹시 모듈

kevinitcoding.tistory.com

 

파이썬에서 __name__ 변수란?


파이썬 파일(.py)의 이름을 저장

 

모든 파이썬 파일(.py)에는 __name__이라는 숨겨진 변수가 있습니다. 이 변수의 역할은 해당 모듈의 이름을 저장합니다.  모듈의 개념을 간단히 말씀드리자면, 함수와 클래스 등으로 이루어진 하나의 기능 단위이자 파이썬 파일(.py)을 모듈이라고 합니다.

프로그래머는 자신에게 필요한 기능을 가진 모듈을 호출(import)하여 프로그램을 작성합니다. 이 과정에서 모듈을 구분해야 하는데, 그 구분자 중 하나로 파이썬 파일의 이름을 활용합니다.

 

 

왜 __name__ 변수가 필요할까?


시작점을 구분할 수 있는 기준

 

제가 메인으로 작성하고 있는 파이썬 파일(.py)에서 다른 모듈(.py)을 호출했다고 가정하겠습니다. 컴퓨터 입장에서 봤을 때, 메인 파일과 모듈 모두 .py 확장자를 가진 스크립트입니다.

컴퓨터는 메인 파일과 모듈 중, 어떤 프로그램을 먼저 시작해야 할지 구분할 수 없습니다. 프로그래머는 컴퓨터가 메인 파일과 모듈을 구분할 수 있도록 컴퓨터에게 기준을 제시해 줘야 합니다. 그 기준에 대한 제시로 __name__변수가 필요합니다.

 

 

 

__name__ 코드 실습


호출하면 __main__ & 호출당하면 모듈 이름

 

실습 구조

 

저번 시간에 만든 패키지와 모듈을 활용하여 __name__에 대한 실습을 진행해 보도록 하겠습니다. main 파일에서 직접 만든 Test 패키지를 호출해 보도록 하겠습니다. 참고로 What_is_your_name.py 모듈의 코드는 아래와 같습니다.

# What_is_your_name.py
print("저를 호출해주셔서 감사합니다.")
print("저의 이름은 {}입니다.".format(__name__))

def add(a,b):
    return a+b

def sub(a,b):
    return a-b

 

What_is_your_name.py 모듈을 호출해 보도록 하겠습니다.

from Test.What_is_your_name import *

# 실행한 결과값
저를 호출해주셔서 감사합니다.
저의 이름은 Test.What_is_your_name입니다.

 

What_is_your_name.py 모듈에는 __name__ 변수를 출력하는 print 코드가 있습니다. 특정 함수만 호출하는게 아니라, 모든 함수(*)를 호출했으므로 What_is_your_name.py 모듈이 호출되는 순간 자신의 __name__ 변수의 값을 출력합니다.

What_is_your_name.py 파일은 main 파일에서 호출한 파이썬 파일(.py)이므로 모듈이고, 모듈의 이름은 패키지.파일명이네요.

참고로 print문을 보기 싫고, add 함수만 활용하고 싶다면 아래와 같이 사용하시면 됩니다.

from Test.What_is_your_name import add

혹시 from과 import의 차이에 대해 궁금하신 분은 여기를 참고해 주세요.

 

 

그러면 이번에는 main 파일의 이름을 출력해 보도록 하겠습니다.

print(__name__)

# 결과값
__main__

 

제가 작성 중인 파일의 __name__값은 __main__이라고 나오네요. 호출하고 호출당하는 관계에서 프로그램의 시작점이자 호출을 하는 파일은 __main__이고 다른 호출되는 파일은 각각 다른 이름을 갖게 되는 셈입니다.

 

따라서, 프로그래머는 가장 처음 실행되어야 하는 파일에 아래와 같은 조건을 부여함으로써 원하는 순서를 구성할 수 있습니다.

if __name__ == "__main__":
    print("이 프로그램은 가장 처음 시작되는 main 파일입니다.")
    # Do Something
    
# 결과값
이 프로그램은 가장 처음 시작되는 main 파일입니다.

 

실제로 GitHub의 코드를 보면 하나의 프로그램에는 많은 파이썬 파일(.py)이 있는데, 그중에서 if __name__ == "__main__"이라는 코드를 가진 파이썬 파일이 딱 하나 있을 겁니다. 앞으로 그런 코드를 보신다면, "아, 이 파일이 프로그래머가 가장 처음 실행되도록 구성해 둔 main 파일이구나."라고 생각하시면 됩니다. 

댓글