enum의 사용방법을 처음 알았을때.
신기하고 편해서 정리하려고 한다.
doc.
https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
enum.
열거형(enumerated type)이며, 서로 연관된 상수들의 집합.
클래스로 생성 가능하여 필드, 메소드 등 상수의 역할을 넘어서 많은 역할 가능.
사용목적.
서로 연관된 상수들의 집합을 이용하여서.
가공 및 처리(메소드를 이용하여)가 필요한 경우의 사용.
사용방법.
예시를 참고.
웹 페이지에서 여러가지 날짜 포맷을 지원하는 경우.
public enum DateFormat { /** * yyyyMMdd 문자열 형식 */ YYYYMMDD("yyyyMMdd") , /** * yyyyMMddHHmmss 문자열 형식 */ YYYYMMDDHHMMSS("yyyyMMddHHmmss") /** 필드 선언
*/ private String value; private DateFormat(final String value) { this.value = value; } public String getValue() { return this.value; } /** * 해당 날짜 포맷에 맞게 현재 날짜를 반환한다. * 선언되지 않은 날짜 형식일 경우 빈 문자열을 반환 * * @return String */ public String getNowDate() { String retValue = Const.STRING_EMPTY; try { retValue = new SimpleDateFormat(this.value) .format(Calendar.getInstance().getTime()); if ( DateFormat.YYYYMMDDHHMMSSTT == this ) { retValue = retValue.substring(0, 16); } } catch (NullPointerException | IllegalArgumentException | IndexOutOfBoundsException e) {} return retValue; } }
테스트.
현재 날짜를 구하려면 3줄 정도가 필요하지만.
enum을 사용하여 날짜 포맷형태대로 1줄로 구현할 수 있다.
@Test public void testGetValue() { // 현재 날짜를 구하는 소스 SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMdd"); Date time = new Date(); String time1 = format1.format(time); assertEquals(time1, DateType.YYYYMMDD.getNowDate()); SimpleDateFormat format2 = new SimpleDateFormat("yyyyMMddHHmmss"); String time2 = format2.format(time); assertEquals(time2, DateType.YYYYMMDDHHMMSS.getNowDate()); }
내용요약.
현재 날짜를 구하는 소스는 enum을 활용하여 선언해 놓았기 때문에 매번 날짜 구할때 소스 낭비가 발생하지 않으며.
날짜 타입이 변경되었을 시 enum 클래스만 수정하면 되기에 간편하다.
+ 추가.
프로젝트 소스 안에서도 스타일의 따라 결과 처리 시 다양한 변수를 사용할 수 있다.
i) 결과 처리가 성공이라면.
true = 1 = Y
(true일 수도 있고 1일 수도 있으며 Y일수도 있다.)
ii) 실패인 경우라면
false = 0 = N
(false일 수도 있고 0일 수도 있으며 N일수도 있다.)
활용.
여기서 true/false boolean형, Y/N과 0/1은 String이다.
하나의 결과값을 여러 가지의 상수로 표현은 가능 조건 성립(아래)
public enum ResultFormatType { /** * 성공 문자열 형식 */ SUCCESS("0", "Y", true) , /** * 실패 문자열 형식 */ FAIL("1", "N", false); private String resultNum; private String resultAlphabet; private boolean isResult; private ResultFormatType(String resultNum, String resultAlphabet, boolean isResult) {
this.resultNum = resultNum; this.resultAlphabet = resultAlphabet; this.isResult = isResult; } /** * 성공시 문자열 "0", 실패시 "1" 전달 * * @return String * */ public String getResultNum() { return resultNum; } /** * 성공시 문자열 "Y", 실패시 "N" 전달 * * @return String * */ public String getResultAlphabet() { return resultAlphabet; } /** * 성공시 TRUE, 실패시 FALSE 전달 * * @return boolean * */ public boolean isResult() { return isResult; } }
테스트.
결과처리를 위해서 한줄이면 사용 가능하다.
@Test public void testResultStatus() { ResultFormatType resultStatus = ResultFormatType.SUCCESS; assertEquals("Y", resultStatus.getResultAlphabet()); assertEquals("0", resultStatus.getResultNum()); assertEquals(true, resultStatus.isResult()); resultStatus = ResultFormatType.FAIL; assertEquals("N", resultStatus.getResultAlphabet()); assertEquals("1", resultStatus.getResultNum()); assertEquals(false, resultStatus.isResult()); }
총평.
어렵지 않으며 심지어 편리하다.
실제 프로젝트에서 자주 사용하고 있다.
'프로그래밍이야기 > Java' 카테고리의 다른 글
[객체지향] OCP 적용 정리 (0) | 2022.01.23 |
---|---|
[Item6] 불필요한 객체를 생성하지 마라 (0) | 2022.01.05 |
[Java] Charset과 유니코드 그리고 인코딩 (0) | 2020.05.20 |
[Java] 상수(Const)를 선언하자 (0) | 2020.05.15 |
[Java] 접속한 IP를 구해보자 (0) | 2020.05.12 |
댓글