
242
이펙티브 러스트
아이템
23
: 와일드카드 임포트를 쓰지 마라
러스트에서는 다른 크레이트나 모듈에 있는 이름 있는 아이템을
use
문으로 가져와서, 그 이름
을 로컬 모듈의 코드에서 본래 소속
qualification
을 명시하지 않고 사용할 수 있다.
와일드카드 임포
트
wildcard
import
(또는
글롭 임포트
glob
import
)는
use
somecrate
::
module
::*
형식의 구문으로서,
여기서 명시한 모듈에 속한 모든 공개 심벌
symbol
을 로컬 네임스페이스에 추가한다.
아이템
21
에서 설명한 것처럼 외부 크레이트는 마이너 버전 업그레이드로
API
에 항목을 새로
추가할 수 있다. 이는
하위 호환 변경
backward
compatible
change
에 해당하기 때문이다.
이 두 가지가 결합하면 의존성을 해치지 않는 변경이 오히려 코드를 손상시키는 문제가 발생할
수 있다. 만약 이러한 의존성에 의해 새로 추가한 심벌이 기존에 사용하고 있던 이름과 충돌하
면 어떻게 될까?
다음과 같이 단순한 코드에서는 문제가 되지 않는다. 와일드카드 임포트를 통해 가져온 이름들
은 우선순위가 가장 낮기 때문에, 기존 코드에 있던 이름이 우선 적용된다.
use bytes::*;
// 로컬에 있는 `Bytes` 타입은 `bytes::Bytes`와 충돌하지 않는다.
struct ...