파이썬 토이 프로젝트 - Q&A

지환·2023년 6월 1일
0

python

목록 보기
3/12

if name == 'main': 왜 쓰는가?

그대로 해석해보면 'name이라는 변수의 값이 main이라면 아래의 코드를 실행하라.'라는 뜻이다. 즉, 메인 함수의 선언, 시작을 의미이며, 현재 스크립트 파일이 실행되는 상태를 파악하기 위해 사용한다.

1) name 내장변수

파이썬 공식 사이트에서는 name 내장변수를 아래와 같이 정의하고 있다.
name : The name attribute must be set to the fully-qualified name of the module. This name is used to uniquely identify the module in the import system.

현재 모듈의 이름을 담고있는 내장 변수이다. 이 변수는 직접 실행된 모듈의 경우 main이라는 값을 가지게 되며, 직접 실행되지 않은 import된 모듈은 모듈의 이름(파일명)을 가지게 된다.

# hello.py
print('hello 모듈 시작')
print('hello.py __name__:', __name__)    # __name__ 변수 출력
print('hello 모듈 끝')
# main.py
import hello    # hello 모듈을 가져옴
print('main.py __name__:', __name__)    # __name__ 변수 출력
# 실행결과
hello 모듈 시작
hello.py __name__: hello
hello 모듈 끝
main.py __name__: __main_

파이썬에서 import로 모듈을 가져오면 해당 스크립트 파일이 한 번 실행된다. 따라서 hello 모듈을 가져오면 hello.py 안의 코드가 실행된다. 따라서 hello.py의 name 변수에는 'hello'(import된 모듈은 모듈의 이름(파일명))가 들어가고, main.py의 name 변수에는 'main'이 들어간다.

어떤 스크립트 파일이든 파이썬 인터프리터가 최초로 실행한 스크립트 파일의 name에는 main이 들어간다. 이는 프로그램의 시작점(entry point)이라는 뜻이다.

파이썬의 코드 실행방식과 연관되어 파이썬은 최초로 시작하는 스크립트 파일과 모듈의 차이가 없다. 어떤 스크립트 파일이든 시작점도 될 수 있고, 모듈도 될 수 있다. 그래서 name 변수를 통해 현재 스크립트 파일이 시작점인지 모듈인지 판단한다.

여기까지 1) 파이썬의 코드 실행방식과 2) name 내장변수를 알아보았다.

if __name__=="__main__"

우리가 알아보고자 했던 위 코드에 대해서는 예를 통해 이해해보자.

# calc.py
def add(a, b):
    return a + b
 
def mul(a, b):
    return a * b
 
if __name__ == '__main__':    # 프로그램의 시작점일 때만 아래 코드 실행
    print(add(10, 20))
    print(mul(10, 20))
    
# 실행결과
30
200

IDLE에서 실행하거나 python calc.py와 같이 파이썬 인터프리터로 실행하면 10, 20의 합과 곱이 출력된다. 즉, 프로그램의 시작점일 때는 if name == 'main': 아래의 코드가 실행된다.

이번엔 반대로 import로 calc를 가져와서 calc.py를 모듈로 사용해 보자.

>>> import calc
>>> 

모듈로 가져왔을 때는 아무것도 출력되지 않는다. 스크립트 파일을 모듈로 사용할 때는 calc.add, calc.mul처럼 함수만 사용하는 것이 목적이므로 10, 20의 합과 곱을 출력하는 코드는 필요가 없다. 이때는 아래와 같이 calc.add와 calc.mul 함수에 원하는 값을 넣어서 사용하면 된다.

>>> calc.add(50, 60)
110
>>> calc.mul(50, 60)
3000

[정리]

if name == 'main':처럼 name 변수의 값이 main인지 확인하는 코드는 현재 스크립트 파일이 프로그램의 시작점이 맞는지 판단하는 작업이다. 즉, 스크립트 파일이 메인 프로그램으로 사용될 때와 모듈로 사용될 때를 구분하기 위한 용도!

쉽게 생각하면 모듈에 if name=='main'이라는 조건문을 넣어주고 그 아래는 직접 실행시켰을 때만 실행되길 원하는 코드들을 넣어주는 것으로 생각하면 쉬울 것이다. 끝 :)

출처)https://velog.io/@mjk3136/if-name-main%EC%9D%80-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%9C%EC%A7%80%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

https://medium.com/@chullino/if-name-main-%EC%9D%80-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%A0%EA%B9%8C-bc48cba7f720

https://hyoje420.tistory.com/45

https://hashcode.co.kr/questions/3/if-__name__-__main__%EC%9D%80-%EC%99%9C%EC%93%B0%EB%82%98%EC%9A%94

https://madplay.github.io/post/python-main-function

profile
아는만큼보인다.

0개의 댓글