본문 바로가기
실버를 위한 코딩/파이썬 연습

[파이썬 연습] 내장 변수 __name__

by forSilver 2024. 8. 11.
반응형

내장 변수 name

파이썬에서 내장 변수 __name__은 모듈의 이름을 나타내는 특별한 변수입니다. 이 변수는 모듈이 직접 실행되는지 아니면 다른 모듈에 의해 임포트(import)되는지 여부를 확인하는 데 사용됩니다.

__name__의 동작 원리

  • 스크립트가 직접 실행될 때: __name__ 변수는 "__main__"으로 설정됩니다.
  • 모듈이 임포트될 때: __name__ 변수는 모듈의 이름으로 설정됩니다.

이를 활용하면 모듈이 직접 실행될 때와 임포트될 때의 동작을 구분할 수 있습니다.

예제

예제 1: 기본 사용법

my_module.py라는 파일을 만들고 다음과 같이 작성합니다:

# my_module.py
def hello():
    print("Hello, World!")

if __name__ == "__main__":
    print("my_module이 직접 실행되었습니다.")
    hello()
else:
    print("my_module이 임포트되었습니다.")

my_module.py 파일을 직접 실행하면:

$ python my_module.py
my_module이 직접 실행되었습니다.
Hello, World!

다른 스크립트에서 my_module을 임포트하면:

# 다른 스크립트
import my_module

출력은 다음과 같습니다:

my_module이 임포트되었습니다.

예제 2: 모듈화된 코드

다음은 여러 파일로 나눠진 프로젝트에서 __name__ 변수를 사용하는 예제입니다.

main.py:

# main.py
import my_module

print("main.py가 실행되었습니다.")
my_module.hello()

my_module.py:

# my_module.py
def hello():
    print("Hello, World!")

if __name__ == "__main__":
    print("my_module이 직접 실행되었습니다.")
else:
    print("my_module이 임포트되었습니다.")

main.py를 실행하면:

$ python main.py
my_module이 임포트되었습니다.
main.py가 실행되었습니다.
Hello, World!

이 예제는 my_module이 다른 파일에 의해 임포트될 때와 직접 실행될 때의 동작을 구분합니다.

실습 과제

  1. calculator.py 파일을 작성하세요. 이 파일에는 덧셈, 뺄셈, 곱셈, 나눗셈을 수행하는 함수들이 포함되어 있어야 합니다. __name__을 사용하여 직접 실행될 때만 간단한 계산을 테스트하도록 하세요.
  2. main.py 파일을 작성하여 calculator 모듈을 임포트하고, 사용자가 입력한 두 숫자와 연산자를 기반으로 계산을 수행하는 프로그램을 만드세요.

실습 과제 답안

1. calculator.py

# calculator.py

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

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

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

def divide(a, b):
    if b == 0:
        return "0으로 나눌 수 없습니다."
    return a / b

if __name__ == "__main__":
    print("calculator.py가 직접 실행되었습니다.")
    # 간단한 테스트
    print("3 + 5 =", add(3, 5))
    print("10 - 4 =", subtract(10, 4))
    print("6 * 7 =", multiply(6, 7))
    print("8 / 2 =", divide(8, 2))
else:
    print("calculator 모듈이 임포트되었습니다.")

2. main.py

# main.py
import calculator

def main():
    a = float(input("첫 번째 숫자를 입력하세요: "))
    b = float(input("두 번째 숫자를 입력하세요: "))
    operation = input("연산자를 입력하세요 (+, -, *, /): ")

    if operation == '+':
        print("결과:", calculator.add(a, b))
    elif operation == '-':
        print("결과:", calculator.subtract(a, b))
    elif operation == '*':
        print("결과:", calculator.multiply(a, b))
    elif operation == '/':
        print("결과:", calculator.divide(a, b))
    else:
        print("유효하지 않은 연산자입니다.")

if __name__ == "__main__":
    main()

 

이러한 구조로 프로그램을 작성하면 각 모듈이 독립적으로 동작할 수 있으며, 다른 모듈에 의해 임포트될 때와 직접 실행될 때의 동작을 명확히 구분할 수 있습니다.