본문 바로가기

enum

[Java] 오늘의 교훈. 위와 같은 코드가 있었다. 위와 같은 상태에서 class A에 있던 public enum을 삭제하고 하나의 독립적인 클래스 파일로 E라는 enum 클래스를 생성하였다. 어차피 public이고 Type도 그대로인지라 컴파일에러는 어디서도 떨어지지 않았고, 변경된 클래스인 A와 새로 만들어진 enum 클래스인 E만을 배포하여 컴파일하였다. 전혀 문제가 없을거라 생각했는데 문제는 User 클래스의 do() 메서드에서 발생하였다. 생각해보면 당연한 것인데... 기존의 E enum 클래스의 return type은 A$E 였고, 새로 뽑아낸 enum 클래스의 Type은 E였다. (기본적으로 앞에 붙는 패키지는 제외..) 결국, 타입이 맞지 않는 오류가 발생하여 위와 같이 기존의 E를 받아 쓰던 클래스들을 전부 다시.. 더보기
[Java] enum을 사용해 분기문을 없애보자. 웹 사이트에서 "정렬" 이라던가 파라메터에 따른 "로그"등을 남길 때 if문이 많이 사용 됩니다. 일반적으로 처음 사이트를 구축시 파라메터를 정해 놓습니다. 정렬에 대한 파라메터.. 처음에는 각 파라메터와 그 파라메터가 뜻하는 것들을 주석으로 잘 달아 놓습니다. 그리고 이것을 처리하는 클래스는 일반적으로 아래와 같은 모양을 갖게 되는 경우가 많습니다. 이제 사이트가 만들어지고 , 다른 개발자들에 의해서 유지보수가 되고 요구사항으로 정렬조건등이 늘어나게 되면서 처음 달아놨던 주석은 엉망이 되고, QueryBuilder의 if문은 요구사항이 생길 때 마다 늘어나게 됩니다. 그나마 Builder 클래스를 로직이 필요한 곳에서 모두 공통으로 사용하고 있다면 상황은 좋은 편이겠지만 혹시라도 위 로직이 여기저기 퍼.. 더보기
enum의 ordinary() 메서드 사용. effective java를 보면 서수가 필요 할 때 enum의 ordinary() 메서드는 가급적 사용하지 말라고 되어있습니다. enum을 구성하는 값이 지워지거나 하게 되면 ordinary() 메서드에서 리턴되는 순서 값도 같이 변하기 때문입니다. 이런식의 버그는 나중에 어디선가 발생하게 되면 상당히 찾기 난해합니다. 그런데 제가 이번에 ordinary를 쓸모있게 사용한 부분(이라고 혼자 생각하는 부분 ^^)이 있어서 소개하려 합니다. ordinary 메서드는 enum을 구성 하는 각 값들의 순서를 리턴합니다. 일 때, FIELDNAME.NAME.ordinary()는 0을 리턴합니다. FIELDNAME.PRICE.ordinary()는 1을 리턴하겠죠. 그러다가 PRICE가 빠지게 되면 FIELDNAM.. 더보기