Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 별표(*) 임포트가 나쁜 생각인 이유

파이썬에서 from 모듈 import *처럼 모듈의 모든 메서드를 한꺼번에 가져오는 것은 좋지 않은 습관입니다. 그 이유는 다음과 같습니다.

  • 프로그램에서 사용한 메서드가 어떤 부모 모듈에 속해 있는지 찾기 어렵습니다.
  • 모듈에 있는 메서드와 같은 이름으로 직접 함수를 정의할 수 없게 되어, 의도치 않은 충돌이 발생할 수 있습니다.

예제 코드

먼저 sample.py 파일에 간단한 add 함수를 작성해 보겠습니다.

## sample.py 파일
def add(a, b):
    return a + b

위 파일을 아래 파이썬 파일과 같은 디렉터리에 저장합니다.

## sample이라는 모듈이 있다고 가정
from sample import *

def add(*nums):
    return sum(nums)

print(add(1, 2, 3, 4, 5))

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

15

겉보기에는 문제없어 보이지만, 만약 sample 패키지 안에도 같은 이름의 add 메서드가 존재한다면 어떻게 될까요? 규모가 큰 프로그램에서는 실제로 호출된 메서드가 어느 것인지 찾기 매우 어려워집니다. 심한 경우 매개변수 불일치로 인한 오류까지 발생할 수 있습니다.

문제 상황 분석

위 프로그램은 사실 sample 패키지의 add 메서드가 아니라 로컬에서 정의한 함수를 호출한 것입니다. 별표(*) 임포트는 네임스페이스를 오염시켜, 어떤 함수가 실제로 실행되는지 코드만 보고는 판단하기 힘들게 만듭니다.

반대로 sample 패키지의 메서드를 명시적으로 호출하고 싶다면, 다음과 같이 모듈 자체를 임포트해야 합니다.

## sample이라는 모듈이 있다고 가정
import sample

def add(*nums):
    return sum(nums)

print(sample.add(1, 2))

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

3

결론

파이썬은 개발자가 원하는 방식대로 모듈을 임포트할 수 있도록 허용하지만, 규모가 큰 프로젝트에서는 모듈의 메서드 이름과 사용자가 정의한 함수 이름이 뒤섞여 혼란을 일으키기 쉽습니다. 따라서 import sample처럼 모듈 단위로 임포트하고 sample.add() 형태로 호출하는 것이 코드의 가독성과 유지보수성 면에서 훨씬 안전합니다. 특별한 이유가 없다면 별표(*) 임포트는 피하는 것이 좋습니다.