import * 와 같이 *(aestrick)를 사용해서 패키지나 클래스를 가지고 오는 것을 와일드 카드 import라고 한다. 자바, SQL 등 에서 가끔 보인다. 단순히 생각했을 때는 그럼 모든 import의 상위호환아니야? 라고 생각할 수 있지만, 위험한 생각이다. 그럼 와일드 카드 import가 왜 쓰이는지. 왜 권장하지 않는지 알아보자.
와일드카드 Import
*(aestrick)를 사용해서 패키지의 하위 클래스들을 모두 import 해 온다.
import java.util.*
위처럼 사용하면 util 내부의 모든 클래스를 가져올 수 있다.
언뜻 보면 매우 편리한 기능같다.
하지만 와일드카드 import는 Google JAVA convention에서도 그렇고 지양하는 방법이다.
이에는 치명적인 단점이 있기 때문이다.
와일드카드 Import의 단점
🚨 클래스명 중첩 가능성
"다른 패키지에 같은 클래스명을 가진 클래스가 없다"를 보장할 수 없다.
즉, 같은 이름을 가진 클래스가 2개 이상이어서 오버라이딩이 발생할 수 있고, 이는 예기치 않은 오류 발생으로 이어진다.
와일드카드 Import에 대한 오해
위의 정의에서 "와일드카드 import는 패키지의 모든 클래스를 가져온다"라고 했지만, 실상 모두 메모리에 로드되는 것은 아니다.
🤔 1. 메모리 낭비가 발생한다?
NO!
- JVM이 클래스를 메모리에 로드하는 시점은 런타임이다.
- import는 컴파일 타임에 사용된다.
≫ import를 많이 사용한다고 해서 메모리 사용량이 늘어나지는 않는다.
🤔 2. 컴파일 시 클래스 매칭 시간이 오래 걸린다?
사실상 NO!
와일드카드를 쓰면 컴파일러가 해당 패키지에서 사용한 클래스만 찾는 작업을 한다.
이론상으로는 매칭 시간이 오래 걸릴 것 같지만, 현대 컴파일러의 처리 속도나 IDE의 지원으로 사실상 무시 가능한 수준이다.
intelliJ에서 자동 와일드카드 import 설정 해제
intelliJ 설정(커멘드 + ,) -> 에디터 -> 코드 스타일 -> Java -> "'*'가 포함된 import 문을 사용하는 클래스 수" 100으로 설정(걍 큰 수로 설정)
'🗄️Backend' 카테고리의 다른 글
[보안] jwt.secret 관리(.gitignore 설정, SpringBoot+intelliJ) (0) | 2025.03.25 |
---|---|
[SpringBoot] Soft Delete (0) | 2025.03.24 |
[DB/MySQL] 데이터타입(CHAR, VARCHAR,TEXT...) (0) | 2025.03.19 |
[JAVA] 어노테이션 (@) (0) | 2025.03.10 |
[백엔드] API 명세서 (0) | 2025.03.08 |