[python]모듈, main함수, if __name__ == "__main__": 의 의미

Jihwan Jung·2022년 6월 27일
1

🎺파이썬

목록 보기
1/5
post-thumbnail

💡 오늘 배울 내용


인공지능을 위한 파이썬 강의를 수강하며, 함수를 정의하고 사용하는 방법에 대해 배웠습니다. 강의 중에 파이썬의 메인 함수에 대한 내용을 접할 수 있었는데, 오늘은 해당 내용을 정리해보도록 하겠습니다.

모듈
main함수
__name__
__main__
엔트리포인트

🔎 모듈


모듈 이란, 함수(or 변수 or 클래스)를 함께 가지고 있는 파일입니다.
그래서, 함수가 들어있는 파이썬 파일을 만들고 해당 파일의 함수를 외부에서 사용한다면, 그 과정을 '모듈을 사용한다'고 합니다.

#mod1.py
import math

def circle_area(radius):
'''입력된 반지름으로 원의 넓이를 계산'''
	return math.pi*radius*radius

다음은 반지름이 입력되면 원의 넓이를 계산하는 함수입니다. 해당 파일을 저장하고, 다른 파일에서 해당 함수를 사용하고 싶을때 모듈을 불러와 사용할 수 있습니다.

🔎 모듈 사용하기


만약 모듈을 파이썬에서 불러와 사용하고 싶다면 어떻게 해야할까요? 동일한 디렉토리라면 파이썬에서 해당 모듈을 불러와 사용할 수 있습니다. main.py 파일에서 방금 만든 모듈을 불러와 실행하는 예제를 확인해봅시다.

#main.py
import mod1

print(mod1.circle_area(3))
#main.py
from mod1 import circle_area

print(circle_area(3))

다음과 같은 두가지 방법으로, 해당 모듈의 함수를 불러와 사용할 수 있습니다.

import 모듈 이름
from 모듈 이름 import 모듈 함수

#main.py
from mod1 import *

print(circle_area(3))

혹시 모듈 함수를 직접 입력하는 것이 귀찮거나, 해당 모듈에 함수가 아주 많이 있을때 *문자를 사용하면 해당 모듈이 있는 함수 전체를 다 불러와 사용할 수도 있습니다.

🔎 __name__변수와 __main__값, 엔트리포인트


직접 만든 모듈을 불러와 사용하는 작업을 하거나 파일의 용량이 매우 커져 이를 분리하고자 할때
__name__ 변수를 확인하는 것은 중요할 수 있습니다.

if __name__ == "__name__":

예제를 이용하여 __name__변수의 개념과 __main__값, 그리고 바로 위에 있는 수식을 이해해 봅시다. 이 부분의 개념을 이해하는데 필요한 추가적인 용어는 엔트리 포인트가 있습니다.

#mod2.py
import math

def circle_area(radius):
'''입력된 반지름으로 원의 넓이를 계산'''
	return math.pi*radius*radius

print("mod2 입니다.")

위에 만들었던 모듈이 다음과 같이 수정되었다고 합시다. 모듈(mod1)도 하나의 파이썬 파일로써 기능하기 때문에, 모듈에 함수를 사용하는 것은 지극히 일반적입니다. 이제, 다시 main2.py에서 해당 모듈을 불러와 사용해봅시다. 예제의 상황에서 모듈을 불러오는 이유는 circle_area 함수를 사용하고 싶기 때문입니다.

#main2.py
from mod2 import *

print(circle_area(3))
#main2.py - 실행결과
mod2 입니다.
28.274333882308138

main2.py의 실행 결과를 통해 알 수 있듯이, 우리는 불러온 모듈의 함수만 사용하고 싶어도, 해당 모듈을 import하는 순간 해당 모듈의 작성되어 있던 함수가 실행된다는 것을 알 수 있습니다. 이러한 상황을 방지하기 위해 필요한 것이 if __name__ == "__main__": 구문이고, 모듈에 이러한 구문을 삽입하면, 해당 모듈을 불러와서 쓸 때 함수만 실행하도록 할 수 있습니다.

#mod3.py
import math

def circle_area(radius):
'''입력된 반지름으로 원의 넓이를 계산'''
	return math.pi*radius*radius

if __name__ == __main__:
	print("mod3 입니다.")

여기서 등장하는 __name__의 개념과 __main__값을 이해해봅시다. 두 개념을 이해하기 위해선 우선 엔트리포인트에 대한 이해가 필요합니다.

엔트리포인트 : 프로그램의 진입점을 말합니다. 우리가 main에서 mod3를 불러 사용했다면, mod3를 import했던 main의 위치가 엔트리포인트가 됩니다.

엔트리포인트 내부에서 __name__ 변수는 __main__의 값을 갖습니다. 즉, if __name__ == "__main__": 구문은 엔트리포인트에서 다른 모듈을 불러와서 사용할때, 동시에 실행되면 안되는 것들을 따로 빼두기 위함입니다. main에서 mod3을 불러왔다면 mod3의 __name__값은 mod3이 되기 때문입니다.

__name__변수 : 파이썬의 __name__변수는 내부적으로 사용하는 특별한 변수 이름입니다. 위의 예제로 설명하면, 직접 mod3 파일을 실행하면 __name__변수에는 __main__이 값으로 저장되지만, 다른 곳(ex. 엔트리포인트)에서 해당 모듈을 불러와서 사용하는 경우에는 mod3.py의 __name__변수에는 mod3이 저장됩니다.

profile
22.10月~24.07月 공군 암호병 복무중/ 사회 과학과 딥 러닝에 관심이 있는 학부생(CS&E)입니다. 기술과 사회에 대한 이해를 바탕으로, 비즈니스 감각과 기술적 역량을 함께 갖춘 인공지능 프로그래머•데이터 과학자로 성장하고 싶습니다.

0개의 댓글