SW/Python

파이썬 if __name__ == "__main__" 이해하기: 초보자를 위한 완벽 가이드

얇은생각 2025. 3. 29. 07:30
반응형

혹시 if __name__ == "__main__"라는 구문을 보면서, "대체 이게 뭐야? 왜 이렇게 복잡하지?"라고 생각해 본 적 있나요? 걱정하지 마세요. 이 글을 끝까지 읽으면 더 이상 머리를 긁적일 필요가 없을 거예요.

 

 

궁금증 해결: 왜 이 구문이 필요할까요?

한 번 상상해 볼게요. 간단한 덧셈과 뺄셈을 하는 Python 프로그램을 만들었어요. 이름은 calculator.py예요. 그리고 우리가 원하는 대로 잘 작동하죠.

# calculator.py
print("간단한 계산기입니다.")

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

num1 = int(input("첫 번째 숫자를 입력하세요: "))
num2 = int(input("두 번째 숫자를 입력하세요: "))
print("합계:", add(num1, num2))
print("차이:", subtract(num1, num2))

 

이걸 실행하면, 입력을 받고 결과도 잘 나와요. 깔끔하죠? 그런데 여기서 문제가 생깁니다. 우리가 이 코드를 다른 프로그램에서도 재사용하고 싶어서 program.py라는 파일을 만들었어요.

# program.py
import calculator

print("계산기 모듈을 사용합니다.")
result = calculator.add(5, 3)
print("덧셈 결과:", result)

 

이제 program.py를 실행해 볼까요? 그런데 어라, 우리가 예상한 결과 대신 이런 게 뜨네요:

간단한 계산기입니다.
첫 번째 숫자를 입력하세요:

 

이게 뭐지? 우리가 원하는 건 add 함수만 쓰는 건데 왜 갑자기 입력을 요구하죠?

 

 

원인: Python은 모듈을 가져오면 전체 코드를 실행해요

Python은 모듈을 가져올 때, 그 파일에 있는 모든 코드를 처음부터 끝까지 실행합니다. 그래서 함수 외부에 있는 print나 input 같은 명령어도 덩달아 실행되는 거예요. 바로 이 부분이 문제죠.

 

해결책: if __name__ == "__main__"로 깔끔하게 정리하기

이 문제를 해결하려면 코드를 살짝 바꿔야 해요. 바로 이 구문을 추가하면 되죠.

# calculator.py
print("간단한 계산기입니다.")

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

if __name__ == "__main__":
    num1 = int(input("첫 번째 숫자를 입력하세요: "))
    num2 = int(input("두 번째 숫자를 입력하세요: "))
    print("합계:", add(num1, num2))
    print("차이:", subtract(num1, num2))

 

이 구문이 어떻게 문제를 해결하나요?

Python은 프로그램을 실행할 때마다 __name__이라는 내장 변수를 설정합니다. 프로그램을 직접 실행하면 __name__은 "__main__"으로 설정돼요. 하지만 모듈로 가져올 때는 그 모듈의 이름으로 설정되죠.

그러니까 if __name__ == "__main__"로 감싸둔 코드는 파일을 직접 실행할 때만 동작하고, 모듈로 가져올 때는 무시되는 거예요.

 

실제로 확인해 볼까요?

  1. calculator.py를 직접 실행했을 때:
$ python calculator.py
간단한 계산기입니다.
첫 번째 숫자를 입력하세요: 3
두 번째 숫자를 입력하세요: 5
합계: 8
차이: -2

 

  1. program.py에서 모듈로 가져왔을 때:
$ python program.py
계산기 모듈을 사용합니다.
덧셈 결과: 8

 

구문을 이해해 보죠

  • if: 조건을 검사하는 명령어죠.
  • __name__: Python이 자동으로 설정하는 변수입니다.
  • == "__main__": 이 스크립트가 직접 실행되는지 확인합니다.

 

이 구문은 프로그래머들 사이에서 종종 "던더 네임"(double underscore name)이라고 불립니다. 귀엽지 않나요?

 

이 구문이 유용한 상황들

1. 테스트와 디버깅할 때

테스트나 디버깅 코드를 if __name__ == "__main__" 안에 넣으면 파일을 실행할 때만 실행돼요.

# math_utils.py

def multiply(a, b):
    return a * b

if __name__ == "__main__":
    print("곱셈 테스트:")
    print("2 * 3 =", multiply(2, 3))

 

2. 재사용 가능한 모듈 만들기

모듈로 가져와도 불필요한 코드가 실행되지 않도록 정리할 수 있어요.

# string_utils.py

def reverse_string(s):
    return s[::-1]

if __name__ == "__main__":
    print("'hello' 뒤집기:", reverse_string("hello"))

 

3. 코드를 깔끔하게 유지하기

주요 로직과 재사용할 수 있는 부분을 깔끔하게 분리할 수 있어 유지보수가 쉬워집니다.

 

흔히 하는 실수

  • 구문을 생략하는 것: 불필요한 코드가 실행될 수 있어요.
  • 잘못된 위치에 배치: 보통 파일 하단에 두는 것이 가독성에 좋아요.

 

마무리: 이 구문이 중요한 이유

이제 왜 if __name__ == "__main__" 구문이 필수적인지 이해되셨죠? 이 구문을 사용하면 코드가 모듈화되고 재사용이 쉬워지며, 유지보수도 편리해집니다. 초보든 전문가든 이 구문을 잘 이해하면 큰 도움이 될 거예요.

반응형