dyway

I'm very well : Life of an ordinary programmer

Constant Interface 문제 – Constant는 어디에? Class? Interface?

간만의 자바 프로젝트인데다, 2-3년 전과 비교해서 달라진 부분도 많고, 그 동안 손을 놓고 있던 탓에 모르는 부분이 태반이라 공부도 할 겸해서 혼자 조금씩 스프링 프레임웍을 사용하여 게시판을 만들어 보고 있다. 최근까지도 계속 자바 프로젝트를 진행한 사람들이 많이 있는 다른 파트의 소스를 참고용으로 보다가 눈에 띈 사실이 하나 있었다.

여러 클래스에서 사용하는 상수 값을 파트마다 다르게 분리하여 사용하고 있다는 것. 상수 값을 Constants라는 이름으로 따로 분리해 놓긴 했는데, 어떤 파트는 Class로, 어떤 파트는 Interface로 분리해 놓은 것이었다. 내 경험 상으로는 Constant는 항상 Class로 빼서 사용을 해 왔는데, 생각해보니 어차피 값이 바뀌는 일도 없고, Constant클래스에서 상수 값 외의 별도의 메소드를 따로 작성하지 않기도 했었기 때문에 Interface를 써도 문법상으로 틀린 것도 아니고 그렇게 잘못된 것 같지는 않았다. 단지, 좀 찜찜하다는 생각이 들기는 했지만.

그렇게 계속 소스를 보는데, 정말 Constant를 Interface에 넣어서 사용해도 될까? 그렇게 많이들 쓰나? 하는 의문이 들기 시작했다. 급기야 메신저로 몇 명에게 물어봤더니 위의 이유대로 어차피 상수 값만 가지고 있고, 구현되어있는 내용이 없으니 Interface에 상수 값을 담아둬도 상관없는 것 아니겠느냐는 반응과 그렇게 쓰는 건 본 적이 없다는 반응을 보이더라.

나는 후자인 입장인데다가  Interface는 Interface 나름의 사용 용도가 있는 건데, 여기에 상수를 넣어서 참조한다는 게 영 꺼림칙했다. 그래서 찾아보니 Anti pattern 즉, 자주 사용되기는 하지만 비효율적이거나 비생산적인 유형에 이 문제가 포함되어 있는 걸 발견했다. 게다가, 지금까지 얘기한 Constant Interface는 별도의 위키가 따로 있을 정도였다.

결론적으로 상수 값은 Class에 담아서 사용하는 게 낫고(Anti pattern이 반드시 지양해야할 법칙이라면 옳고 그름의 문제이겠지만, 그런 게 아니니까), 코드의 양을 줄이기 위해서는 import static 구문을 사용하면 된다는 것을 알 수 있었다. Interface는 애초의 사용 용도에 맞게끔 사용해야하며, Interface에 상수 값을 넣고 사용할 때의 문제점, 비효율적인 점(내부에서 사용하는 상수 값이 외부에 노출, 추후에 사용하지 않게 되더라도 계속 가지고 있어야 한다는 점 등)들은 위의 위키 링크에서 언급이 되어 있으니 참고하면 될 듯하다. 읽지도 않고, 책꽂이에 잘 모셔둔 Effective Java에 이 내용이 포함되어 있다는 것도 검색을 하다 알게 되어 참 민망하기도 했다.

광고

Written by dyway

2012년 9월 4일 , 시간: 12:00 오후

프로그래밍에 게시됨

Tagged with , ,

One Response

Subscribe to comments with RSS.

  1. 그러니까 책을 열심히 보라마리야 ㅎㅎㅎㅎ 개발은 어려워두 너~~~~~~~~~무 어려워.

    조선한량

    2012년 9월 4일 at 12:24 오후


댓글이 닫혀있습니다.

%d 블로거가 이것을 좋아합니다: