본문 바로가기
프로그래밍이야기/Java

[Java] Enum의 활용

by 사랑꾼이야 2020. 5. 22.
반응형

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()); }

총평.

어렵지 않으며 심지어 편리하다.

실제 프로젝트에서 자주 사용하고 있다.

반응형

댓글