어느 날 import 문에 관해서 코드리뷰를 받았다…

thx to 소연...
import문은 외부 클래스를 불러와서 사용할 수 있게 만들어준다는건 다들 알고 계실텐데요.
하지만 import 방식에 따라 코드의 명확성, 유지보수성, 충돌 가능성등이 크게 달라질 수 있다고 합니다!
import jakarta.persistence.*;
제가 처음에 쓴 와일드카드 방식입니다.
이렇게 쓰게 되면, 해당 패키지의 모든 public 클래스와 어노테이션을 가져오게 됩니다.
이렇게 되면 어떤 문제가 발생할 수 있을까요?
Java에서는 동일한 이름을 가진 클래스나 애노테이션이 서로 다른 패키지에 존재할 수 있습니다.
예를 들어,
jakarta.persistence.Entityorg.hibernate.annotations.Entity (deprecated 되었지만 여전히 존재하는 상태)두 클래스 모두 이름이 Entity로 동일한 상태입니다.
근데 만약, 하나의 파일에서 아래와 같이 작성했다면
import jakarta.persistence.*;
import org.hibernate.annotations.*;
@Entity
public class Deposit {
}
컴파일러가 @Entity를 어느 패키지의 Entity로 인식해야 할지 혼란스러워 합니다.
그렇게 되면 컴파일 에러가 발생하겠죠!!
또한 저는 jakarta.persistence.Entity 를 사용하고 있다고 생각했는데, IDE가 org.hibernate.annotations.Entity 를 자동으로 import해서 JPA 매핑이 제대로 동작하지 않을 수 있고, 디버깅에 많은 시간을 소모할 수도 있습니다.
때문에, 아래와 같이 정확한 경로를 명시한 명시적 import 방식을 선호하는데요.
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
IntelliJ에서는 기본적으로 한 패키지에서 5개 이상의 클래스를 import하면 자동으로 와일드카드 임포트로 변환합니다. 그러면 한 패키지에서 5개 이상의 클래스를 쓰면서 와일드카드로 임포트로 자동 변환되는 것을 막으려면 어떻게 하면 될까요?

File > Setting > Editor > Code Style > Java 로 이동해주세요
Code count to use import with “*” 를 매우 큰 값(ex:100)으로 설정해주시면 됩니다!