Java Enum을 활용해보기
제휴사 연동서비스를 개발하던 중 퇴사자분이 만들어놓은 코드를 만났는데 대략 비슷하게 구현을 해보면 이렇다.
1 | //... |
1 | String bookingType = getStatusType("Booking", vo.getCode()); |
이 코드는 Booking과 Payment 같은 타입과 기존 아이템의 상태코드 값을 받아서 매칭되는 상태값을 반환하는 메서드였다. 코드는 처음에 보면 별 생각이 없었지만, 타입 유형이 늘어나고 코드가 많아지면 switch문이 복잡해지고 유지보수가 어려워지는 문제가 생길 수 있다고 생각이 들었다.
검색을 하던 도중 시간이 좀 지난 글이지만 우아한형제들 기술블로그 - Java Enum 활용기 라는 글에서 3. 데이터 그룹관리 세션의 내용을 적용할 수 있겠다고 판단되었다. Enum을 활용하여 데이터를 그룹화 하고 각 타입은 본인이 수행해야할 기능만 책임지도록 하는게 중요해 보였다.
개선된 Enum 클래스는 대략 아래와 같다.
1 | public enum BookingType{ |
1 | ItemStatus code = ItemStatus.findByCode(vo.getCode()); |
이제는 직관적으로 각 유형에 대한 상태코드를 볼 수 있다. BookingType의 OK가 가진 상태코드를 직관적으로 볼수 있어서 가독성이 좋아졌다.
데이터들의 그룹화를 통해서 상태매핑 관계를 파악하기 더 수월해지고 입출력도 Enum을 사용해서 별도의 검증없이도 예측이 가능하고 실수로 다른 문자열이 들어올 일이 없어서 타입 안정성이 보장된다.
추후 기능 확장 시에도 Enum 클래스만 수정하면 되서 side-effect가 적을 것으로 기대된다.