반응형
Enum 총 정리
수없이 들어온 Enum 탄생 배경과 사용법 그렇다면 도대체 실무에서 Enum을 어떻게 활용해야 할까?
Enum을 사용하는 글들이나 실무 코드들에 적용했던 방법을 보면
(1) String이나 int로 하드코딩했던 것들을 Enum으로 리팩토링해서 타입 세이프 하게 사용
(2) 장기간 변경되지 않는 국가코드, 전화번호 앞자리 등 어떤 코드들을 DB에서 저장해서 사용했던 것들을 Enum으로 변경해서 DB 쿼리를 최소화해 부하를 줄이는 방법 사용
(3) 개발된 로직 중에 개념이 애매모호한 것들을 하나로 묶는 리팩토링 작업에 사용
이렇게 3가지에 주를 이룬다.
실제 업무 적용 사례
회원가입할 때 지역번호 Select 박스에 나오는 값들을 매번 DB 코드 테이블에서 읽어서 뿌려줬는데
지역번호는 거의 바뀌지 않기 때문에 enum으로 만들어서 메모리에 올려놓고 호출하는 방법으로 리팩토링했습니다.
DB 커넥션 > 쿼리 실행 (회원가입 창에 접근할 때마다)을 static으로 생성된 리스트를 호출하는 방법으로 변경해 서버 자원 낭비를 최소화했습니다.
public enum AreaCode {
A01("02", "서울특별시"), A02("031", "경기도"), A03("032", "인천광역시"), A04("033", "강원도"), A05("041", "충청남도"),
A06("042", "대전광역시"), A07("043", "충청북도"), A08("044", "세종특별자치시"), A09("051", "부산광역시"), A10("052", "울산광역시"),
A11("053", "대구광역시"), A12("054", "경상북도"), A13("055", "경상남도"), A14("061", "전라남도"), A15("062", "광주광역시"),
A16("063", "전라북도"), A17("064", "제주특별자치도");
private String areaCode;
private String sido;
AreaCode(String areaCode, String sido) {
this.areaCode = areaCode;
this.sido = sido;
}
private static final List<Map<String, String>> areaCodes = Arrays.stream(values())
.map(AreaCode -> {
Map<String, String> m = new HashMap();
m.put("cd", AreaCode.name());
m.put("nm", AreaCode.areaCode);
return m;
})
.collect(Collectors.toList());
public static List<Map<String, String>> getAreaCodes() {
return areaCodes;
}
}
더 좋은 실제 업무 적용 사례들이 있어 소개합니다. 강추!!!
우아한 형제들 테크블로그 Java Enum 활용기, Legacy DB의 JPA Entity Mapping (Enum Converter 편)
드디어 Enum 총 정리가 끝났습니다. Enum의 장단점을 잘 파악하셔서 업무에 꼭 적용해보시길 바랍니다.
읽어 주셔서 감사합니다.
참고
- 남궁성, Java의 정석 3rd Edition, 도우출판, 2016
- Joshua Bloch, Effective Java 3/E, 인사이트, 2018
반응형
'Java' 카테고리의 다른 글
[Java] Enum 사용법 (2) - 문법 (0) | 2022.09.06 |
---|---|
[Java] Enum 사용법 (1) - 탄생 배경 (0) | 2022.09.06 |
[Java] 아키텍처 테스트 - ArchUnit (+ JUnit 5) (0) | 2022.09.06 |
[Java] JUnit 5 사용법 (12) - AssertJ ( + vs Hamcrest, 마이그레이션) (1) | 2022.09.06 |
[Java] JUnit 5 사용법 (11) - Hamcrest (0) | 2022.09.06 |
댓글