dev2018. 3. 7. 13:43

나는 개발할 때, 특정 모델의 프로퍼티로 사용되는 enum 등의 작은 클래스를 모델 혹은 서비스의 이너 클래스로 밀어넣는 경향이 있다.

그 이유는 첫째로 파일이 많아지는 것에 대한 저항감이 있고,
둘째로는 클래스의 연관성을 보기가 좋기 때문이다.

예를 들면 아래와 같은 식이다.

public class Game {
  String name;
  Status status;

  public enum Status {
   IDLE, RUNNING
  }
  ...
}

저것의 호불호를 떠나 저런 식의 개발을 intellij 에서 할 때,
inner class 에 대한 import 를 IDE 기능을 통해서 하면 꼭 아래처럼 들어갔다.

if (game.getStatus() == Game.Status.RUNNING) {...}

워낙에 흔한 키워드라면 오히려 저렇게 보이는게 나을 수도 있긴한데,
해당 참조가 많을수록 종종 코드를 오히려 지저분하게 만드는데 일조하는 것 같다는 생각이 들 때도 있다.
(위 예를 참고로 보면, Person. 이 반복되니까.)

그래서 찾아봤다. intellij 에서 auto-import 로 inner class 도 찾아서 import 로 박아주면 안될까.
원하는 모양은 이렇다.

import Game.Status;
...
if (game.getStatus() == Status.RUNNING) {...}

intellij 에서 아래와 같은 설정을 통해 inner class 에 대한 auto-import 도 활성화 해줄 수 있다.
intellij 설정 > Editor > Code Style > Java > imports 에서 insert imports for inner classes 를 활성화 해주면 된다.

아래 링크에서 찾았는데, 댓글을 달아준 사람이 이런 얘기를 한다.
https://stackoverflow.com/questions/14477437/intellij-idea-how-to-enable-imports-for-inner-classes/14478159
inner class 의 참조를 외부에서 사용한다면, 이건 디자인 자체를 재검토해야 하지 않겠냐.

생각해보면, IDE 덕분에 파일을 잘게 쪼개도, 그걸 검색하거나 의미를 파악하는데 드는 시간과 비용은 크지 않다.
쉽게 연관 관계를 찾을 수 있고, 잘 정리된 패키지를 통해 의미를 추정해 볼 수도 있다.
정답이 없는 문제이긴 하지만, import 의 문제가 아닌 디자인의 문제로서 생각해봐야 할 것 같다는 답변자의 말에 나도 스스로를 돌아본다.