본문 바로가기

IT/파이썬 Python

[파이썬] if __name__ == '__main__': 이 코드는 왜 (거의)모든 파이썬 소스에 있을까요

반응형

이번 포스트에서는 오래간만에 파이썬 코드에 대해 적어볼까 합니다.

언제나 그렇듯이 전문 프로그래머가 아닌 초보자 입장에서의 글인 점을 감안해 주시기 바랍니다. ^^


파이썬 소스 코드를 보면, 다음과 같은 형식으로 구성된 경우가 많은 것을 볼 수 있습니다.


import sys
def multiple2(num):
	return num*2
def plus2(num):
	return num+2
def main():	
	num1=sys.argv[1]
	num2=sys.argv[2]
	result = multiple2(num1)+plus2(num2)
	print (result)
	exit(0)
if __name__ == '__main__':
  main()


하지만 아래 처럼 작성해도 전혀 문제 없이 실행되지요?

import sys
def multiple2(num):
	return num*2
def plus2(num):
	return num+2

num1=sys.argv[1]
num2=sys.argv[2]
result = multiple2(num1)+plus2(num2)
print (result)
exit(0)


그런데 왜 굳이 if __name__ == '__main__': 부분을 코드마다 넣는 걸까요?

그 이유는 Stackoverflow 의 이 아티클을 보면 잘 설명되어 있는데요,

  1. 해당 코드를 직접 실행하지 않고 다른 코드에서 임포트 할 때는 보통  main() 안의 코드를 실행하고 싶지 않고,  함수나 클래스정의 등만을 쓰려 하는 경우가 대부분입니다. 그련 경우 이와 같은 코드가 있으면 코드의 수정 없이 바로 임포트해서 사용할 수 있으며,
  2. 코드가 더 구조적으로, 읽기 쉽게 구성되기 때문입니다.


if __name__ == '__main__ 처럼, 많은 코드에서 반복되는 코드 부분을 "Boilerplate code" 라고 합니다. (위키백과 설명)

저는 처음에, __ (언더스코어) 2개가 붙어 있는 모양이 보일러 다리모양이라서 그런 이름이 붙은 줄 알았습니다.. -_- ;;

위키 백과에 잘 설명되어 있듯이, 그런 이유가 아니라 예전 신문을 만들 때 조판단계에서 항상 같은 문구는 납을 녹여 만든 판으로 인쇄하여 한번 만들어 놓으면 내용을 수정할 수 없고, 또 반복적으로 재사용하게 되는데 그런 것을 일반적으로 일컫는 용어라고 하네요.

프로그래밍에서도, 소스코드 중 일반적으로 변경되지 않고 다양한 (서로 다른) 프로그램 소스에서 반복 사용되는 문구를 가리키는 용어로 정착되었다고 합니다.

따라서 파이썬 뿐 아니라 다른 언어 (Java 혹은 Perl 등) 에도 각자의 보일러플레이트가 존재하며, 그 모양은 물론 언어 마다 서로 다르겠지요.


독자분들도 파이썬 코드를 작성할 경우 보일러플레이트를 왜 써야 하는지 잘 이해하시고, 적절히 잘 사용하시기 바랍니다.

감사합니다 ^^

반응형