와일드 카드 import

후니팍·2023년 2월 27일
1
post-thumbnail

안녕하세요! 오늘은 우아한테크코스 기간동안 놓쳤던 실수에 대해 이야기를 해볼까 합니다.

와일드 카드 import인데요, 혹시 intellij에서 import가 5개 이상되면 자동적으로 와일드 카드 import로 바꾸어준다는 사실을 알고 계신가요?

와일드 카드 import는 google java 컨벤션에서 지양해야 하는 요소인데, ide를 믿고 저도 모르게 와일드카드 import를 사용하고 있었던 것이죠.


google java 컨벤션


구글의 java 컨벤션인데요, 보시는 것과 같이 wildcard(*) import를 사용하지 않는다. 라고 되어있습니다.


intellij 디폴트

하지만 저희가 사용하는 intellij에서는 같은 패키지에서 5개 이상의 import를 넣게 되면 자동적으로 와일드카드 import로 바꾸어줍니다. 일단 이 문제를 지양하기 위해서 저는 defalut 값을 바꾸었는데요. 아래와 같이 와일드 카드를 쓰려면 100개의 import를 쓰게끔 설정했습니다. (쓰지 않겠다는 의지죠ㅋㅋ)

Settings -> Editor -> Code Style -> java 순서로 들어가시고 초록색 박스 안의 숫자를 100으로 설정하시면 자동 와일드카드 import를 막아줍니다. (기본적으로 5가 설정이 되어있을텐데, 100으로 바꾸시면 됩니다. 저는 100으로 바꾸었는데, 앞에 10이 짤린거에요ㅠㅠ)


윗 사진과 같이 와일드카드 import가 자동적으로 사용되던걸 import 설정을 바꾸어주니 아래와 같이 변했습니다.


이게 최선일까?

하지만 과연 이렇게 설정하는 것이 최선일까요? intellij에서 괜히 5개 이상의 import를 와일드 카드 import로 바뀌도록 했을까요?
저는 이 방법이 최선이라고 생각하지는 않습니다. 윗 사진처럼 java.util에서 들고오는 컬렉션들은 윗 방법처럼 ide 설정을 바꾸어 주는 것이 불가피하다고 생각하지만, 개발자가 짜게되는 패키지는 적어도 intellij의 디폴트 값이더라도 와일드 카드 import가 붙으면 안된다고 생각합니다.

jetbrains 회사가 괜히 와일드 카드 import 설정 값을 5로 두었다고 생각하지 않습니다. jetbrains 개발자들도 컨벤션을 지키며 코드를 작성할텐데 무엇인가 이상하지 않나요? 자동으로 설정되는 와일드 카드 import를 수동으로 풀어가며 코드를 작성할까요? 자동 와일드 카드 import가 오히려 더 불편하게 느껴지시지는 않으신가요?


나의 생각

저는 여기서 패키지 분리를 떠올렸습니다. 패키지 분리를 통해 jetbrains 개발자들은 이런 불편을 모르지 않았을까 생각했습니다. 아래는 제 지난 자동차 경주 패키징입니다.

도메인에 더 이상 추가적인 패키지가 없습니다. 이 때문에 컨트롤러에서는 import racingcar.domain.* 와일드 카드 import가 생기게 되었습니다. 저번 과제에서 와일드 카드 import를 지우고 일일히 domain을 추가하는 불편을 겪었던 것이 기억에 남습니다.

이번 사다리 타기 미션에서는 도메인 안에서도 패키지를 분리했습니다. 분리된 패키지는 아래와 같습니다.

비슷한 도메인을 모아 패키징을 했습니다. 패키지를 분리한 덕분에 밑의 사진과 같이 와일드카드 import가 생기지 않았습니다.


마무리

오늘은 와일드 카드 import를 피하는 방법 위주로 이야기하고, 패키징 하자는 의견으로 글을 작성했습니다. 하지만 패키징을 하는 이유는 순전히 이 때문은 아닙니다. protecteddefault같은 접근 지정자가 의미있게 쓰이기 위해서나, 가독성을 위한 이유도 있습니다. 조금 더 공부해서 더욱 의미있는 패키징을 해보려 합니다.

profile
영차영차

1개의 댓글

comment-user-thumbnail
2023년 2월 27일

이해가 완벽히 되었어요!!!!

답글 달기