Python/Python Basic

if __name__=='__main__': - 공부하는 도비

DOVISH WISDOM 2022. 11. 21. 19:12  
728x90
반응형

파이썬은 작성한 코드가 위에서 아래로 한 줄씩 해석되어 실행 결과를 내놓는 인터프리터 언어입니다. 

반면, C나 C++ 같은 컴파일 프로그래밍 언어는 시작점이 항상 main() 함수입니다. 

 

파이썬의 경우, main() 함수 역할을 하는 것은 다음과 같습니다. 

(편의를 위해 __main__으로 표현하겠습니다.)

if __name__ == '__main__':

파이썬은 소스코드를 실행할 때, 위와 같은 코드가 있으면 작성된 코드의 순서와 상관없이 저 함수 안에 작성된 코드를 먼저 실행합니다.

 

파이썬의 __main__함수와 C/C++의 main() 함수,

두 가지의 가장 큰 차이는 

파이썬의 main은 파이썬 소스코드 파일 별로 하나씩 있을 수 있지만, C/C++의 main은 프로그램을 구성하는 소스코드 전반에 걸쳐 단 하나만 있어야 합니다. 

 

이 말은 다음 예제로 쉽게 이해할 수 있습니다.

위 그림 처럼 두 개의 소스 파일을 선언하고, 각각 __main__ 함수를 선언해줍니다.

좌 Cal_Sub.py, 우 Cal_Add.py

 

좌 Cal_Sub.py 실행, 우 Cal_Add.py 실행

두 파일 모두 독립적으로 실행 가능한 걸 알 수 있습니다. 

 

Cal_Sub.py, Cal_Add.py에 있는 __main__에 작성된 코드에 따라,

Cal_Sub.py가 메인 실행코드가 될 수도 있고, Cal_Add.py가 메인 실행 코드가 될 수 있습니다.  

 

위의 코드를 수정해서 __main__이 어떤 절차로 실행되는지 더 자세하게 알아보겠습니다. 

 

__main__을 선언할때 if를 사용하는데 if가 있다면, else도 있겠죠?

if와 else를 가지고 코드를 수정해줍니다.

 

* Cal_Add.py 수정

# Cal_Add.py
import Cal_Sub

def Add(a, b):
    print("Cal_Add' result : ", a + b)
  
if __name__=="__main__":
    print("Cal_Add.py에 있는 main함수가 찐 main")
    a = 30
    b = 20
    
    Cal_Sub.Sub(a, b)
    Add(a, b)

else:
    print("Cal_Add.py가 다른 파일에서 임포트되어 사용됨")

 

* Cal_Sub.py 수정

# Cal_Sub.py
# Cal_Add를 import하지 않음

def Sub(a, b):
    print("Cal_Sub' result : ", a - b)
  
if __name__=="__main__":
    print("Cal_Sub.py에 있는 main함수가 찐 main")
    a = 30
    b = 20

    Sub(a, b)

else:
    print("Cal_Sub.py가 다른 파일에서 임포트되어 사용됨")

이렇게 수정된 코드를 가지고 Cal_Add.py를 실행시켜 보면, 아래와 같은 결과를 얻을 수 있습니다.

 

Cal_Add.py를 실행시키면, 우선 import 된 Cal_Sub 파일을 확인합니다. 

Cal_Sub.py의 __main__은 메인 실행 코드가 아니기 때문에, else 절이 출력된 걸 볼 수 있습니다.

다음은 메인 실행 파일(Cal_Add.py)의 __main__함수 부분이 실행됩니다. 

차례대로 선언된 함수들이 실행됩니다.

 

이 예제를 통해서 두 개 이상의 실행 파일 각각에 __main__이 있더라도

__main__에 작성된 로직에 따라 어떤 파일이 메인 실행코드가 될 수 있는지 알아보았습니다. 

반응형