Ktlint는 왜 wild card import를 권장하지 않을까?

kshired·2022년 7월 9일
2

Kotlin의 lint 툴 중 하나인 ktlint는 아래와 같이 no wildcard import를 적용하고 있다.

사실 unused import까지는 원래 알고 있던 내용이고, 동의하는 내용이여서 이해했는데 갑자기 ktlint를 사용하니 wildcard import를 허용하지 않아서 왜 그럴까 궁금했다.

그렇기에 그 이유를 알아보자.

1. Wildcard Import시 성능 이슈가 있을까?

일단 답부터 말하면, "없다"

컴파일시 wildcard import 되어있더라도, 사용하는 것들만 가져오기 때문에 퍼포먼스 이슈는 전혀 없다.

2. 같은 이름을 가진 다른 패키지의 클래스가 존재 할 때

이와 같은 경우에선 wildcard import시 충돌을 야기할 수 있다고 한다.

그렇기 때문에 wildcard import를 피해야한다.

3. 협업시에 발생할 수 있는 문제

다수의 개발자가 한 프로젝트를 작업할 때, wildcard import는 혼란을 야기할 수 있다.

어떤 클래스에서 실제로 import한 것인지 혼란을 야기할 수 있기 때문에 wildcard import를 피해야한다.

4. 명시적인 import의 장점

wildcard import가 아닌 explicit import를 사용하게 된다면, 어떠한 클래스를 import하는지 명시적으로 알 수 있고 코드에서 중복되는 import를 피할 수 있다.

이러한 이유때문에 wildcard import보다 explicit import가 더 좋다.

더 나아가서

1번에서 wildcard import를 사용했을 때, 컴파일러는 알아서 사용하는 class만 import한다고 하였다.

그러면, explicit import에서 unused import를 했을 때 컴파일러는 과연 사용하는 class만 import할까? 아니면, 명시적으로 import 했으니 일단 import하고 볼까?

답은...!! 결국 코드 내에서 사용되지 않기 때문에 import하지 않는다.

그럼 상관 없는거 아니냐구요? 얘는 명시적으로 import한거니까?

이것도 협업과 코드의 가독성 및 유지보수에 연관이 있다.

사용하지 않는 import를 넣어놓으면 협업시 이걸 왜 import하였는지 의문이 들 수도 있고, 사용하지 않는데 굳이 추가한 것이기 때문에 가독성 및 유지보수 관점에서도 의아함을 야기할 수 있다.

그렇기 떄문에 결론적으로 하고싶은 말은 다음과 같다.

  • wildcard import를 피하자
  • unused import도 피하자

Reference

profile
글 쓰는 개발자

0개의 댓글