열거형(Enum)
열거형(Enum)
열거형(Enum, Enumeration Type)이란 상수들을 모아둔 클래스이다. 서로 관련이 있는 값들을 묶어서 편하게 사용할 수 있도록 하는 것이 목적이다.
Enum의 생성
Enum은 별도로 생성하는 메뉴가 존재하며, 원하는 패키지에 Enum을 생성하면 된다.

다음과 같은 형태로 생성된다.
public enum 이름 {
}
Enum의 특징
Enum은 다음의 특징을 가진다.
클래스와 같은 문법 체계를 가진다.
객체 생성이 불가하다.
최상단에 열거할 값들을 작성해야 한다.
단순 열거형으로 사용할 경우 값을 부여하지 않아도 된다.
멤버 변수를 만들어 객체 형태로 사용할 수 있다. 단, 생성자를 구현해야 한다.
public 생성자를 가질 수 없으며, 기본 생성자는 private 이다.
상속이 불가하다.
데모 1 : 기본 형태의 Enum
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
Week의 코드를 살펴보면, 세미콜론 없이 값을 열거했음을 확인할 수 있다.
public enum Week {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
값을 부여할 수도 있는데 다음 데모에서 살펴보기로 한다. 값을 부여하지 않으면 자동으로 변수명이 문자열 형태의 값으로 인식되며, 작성한 순서대로 0번부터 번호가 부여된다. 이름과 순서는 각각 name() , ordinal() 로 확인할 수 있다.
위 Enum은 다음 상수 형태로 표현이 가능하다
public class Week {
public static final String MONDAY = "MONDAY";
public static final String TUESDAY = "TUESDAY";
public static final String WEDNESDAY = "WEDNESDAY";
public static final String THURSDAY = "THURSDAY";
public static final String FRIDAY = "FRIDAY";
public static final String SATURDAY = "SATURDAY";
public static final String SUNDAY = "SUNDAY";
}
데모 2 : 내부에 값을 가지는 Enum
public enum Week {
MONDAY("월요일"),
TUESDAY("화요일"),
WEDNESDAY("수요일"),
THURSDAY("목요일"),
FRIDAY("금요일"),
SATURDAY("토요일"),
SUNDAY("일요일");
private String value;
Week(String value){
this.value = value;
}
public String getValue() {
return this.value;
}
}
이름과 별개로 값을 가질 수 있으며, 이 때는 내부에 변수를 만들고 생성자를 구현해야 한다. 또한 열거형 상수 선언 시 ( ) 안에 생성자에 들어갈 데이터를 명시해야 한다. 변수는 여러 개 만들어서 여러 값을 보관시킬 수 있다. getValue()
는 임의의 getter 메소드이며, 데이터가 많다면 많이 만들어서 원하는 작업을 처리할 수 있다.
이 예제를 통해 단순 상수 선언보다 Enum은 더 많은 데이터와 기능을 묶어서 가질 수 있음을 알 수 있다.
데모 3 : valueOf() 의 활용
public enum Holiday {
NEWYEAR("신정", 1, 1),
LABORDAY("근로자의날", 5, 1),
CHILDRENSDAY("어린이날", 5, 5),
MEMORIALDAY("현충일", 6, 6),
INDEPENDENTDAY("광복절", 8, 15),
CHRISTMAS("크리스마스", 12, 25);
private String name;
private int month, day;
Holiday(String name, int month, int day){
this.name = name;
this.month = month;
this.day = day;
}
public String getName() {
return name;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
}
valueOf()
는 생성된 열거형 데이터 중에 해당하는 이름이 존재할 경우 객체를 반환하는 명령이다. 존재하지 않을 경우 java.lang.IllegalArgumentException
을 발생시킨다. 이를 통하여 기존의 상수에 비해 좀 더 다양한 처리를 구현할 수 있다.
Last updated