아래 출처의 내용을 아주 간략하게 제가 이해하고자 적었습니다. 자세한 내용도 좋지만 요약해 놓으면 좋으니까요^^
자세한 내용은 아래 출처에서 확인하시면 됩니다.
출처 : https://www.edureka.co/blog/python-main-function/
if __name == "__main__": 을 사용하는 이유를 설명드리겠습니다.
python은 interpreter 언어로(인터프리터) code를 연속적으로 그냥 실행하게 됩니다. 즉, 만든 여러개의 .py 파일에 있는 모든 파일을 순차적으로 실행하게 되겠죠. C/C++ 은 프로그램을 저희는 우선 int main(void) 에 프로그램을 작성하죠. 그러면 왜 main 함수가 먼저 실행될까요?
우선 임베디드 시스템으로 설명드리면 아래는 ARM Application note 107 내에 있는 자료로 대부분의 임베디드 시스템에서의 main task를 실행하기 전에 시스템을 셋업하는 그림입니다. 그림 중에 우측에 User Code가 저희가 작성한 int main()함수가 되는 것이고, 좌측 내용보면 음.. 뭐죠? __main, __rt_entry로 나누어져 있고 뭐라는거야,,? ㅎㅎ 설명드리면 __main에선 코드와 데이터들을 메모리에 잘 셋팅한다고 생각하시면 됩니다. 음.. 메모리 셋팅?? 자세히 말하면 우리가 작성한 코드들에 대해서 실행이 되려면 memory map(메모리 지도라고 하죠)의 run time image를 셋팅하고(ZI data(zero initialize data), code와 data를 copy)해줍니다. 그러면 __rt_entry에선 어플리케이션의 stack과 heap을 셋업, library function초기화, 생성자(c++ 객체)를 초기화합니다. 그리고 대망의 우리가 작성한 main() function이 불리게 됩니다.!! 이건 C/C++ 에 해당되는 것 입니다.
자 그러면 임베디드 시스템에선 main함수가 불리게 되는데 파이썬은 그렇지 않습니다. 일단 파이썬은 코드를 실행할 때 먼저 컴파일을 시킨 다음에 한줄씩 해석이 됩니다. 컴파일은 사용자에겐 숨겨져있고 코드를 출력 생성하기 위해서 python의 가상머신인 pvm(Python Virtual Machine)을 사용하여 변환이 됩니다. 사실 이런 이야기를 다 떠나서 그러면 결론적으로 어떻게 해야하나? 그게 바로 if __name__ == "__main__" 을 사용합니다. 왜냐면 우선 우리가 작성한 코드의 .py script파일을 실행하게되면 python은 내부적으로 __name__ 이라는 변수에 __main__ 이라는 문자열을 할당하게 됩니다. 즉 백그라운드에서 __name__ = "__main__" 을 할당하게 되는 것이죠. 그래서 결국 줄을 하나씩 실행하게 되는데 거기에 if __name __ == "__main__" 이라는 문자열이면 실행해주세요 라는 말이 결국 내가 마치 c/c++처럼 main함수를 내가 직접 만들어서 사용하겠다! 결국 c/c++와 똑같이 설계를 할 수 있게되는 것 입니다..!!
우리가 파이썬으로 코딩을 할때는 maim함수 제외하고 매써드나, class로 모든 코드를 설계를하고 main함수(직접 만든 if문 main함수)에서 해당 class와 매써드(함수)를 불러오는 식으로 코드를 설계하게 됩니다. 그러면 우리가 main함수가 없는데도 마치 main함수를 쓰는 것 처럼 파이썬을 사용할 수 있게됩니다.
생각보다 길어졌는데 저는 위와 같이 가볍게 생각하고 코딩합니다. 더 깊이 파면 좋겠지만 사용하는데는 문제가 없으니까요^^
즐코딩 하세요!
'Python > 기본개념' 카테고리의 다른 글
Pandas 사용법 정리 - 초보자용 (0) | 2023.03.09 |
---|
댓글