열거형(Enum)

열거형(Enum)

열거형(Enum, Enumeration Type)이란 상수들을 모아둔 클래스이다. 서로 관련이 있는 값들을 묶어서 편하게 사용할 수 있도록 하는 것이 목적이다.

Enum의 생성

Enum은 별도로 생성하는 메뉴가 존재하며, 원하는 패키지에 Enum을 생성하면 된다.

다음과 같은 형태로 생성된다.

public enum 이름 {

}

Enum의 특징

Enum은 다음의 특징을 가진다.

  • 클래스와 같은 문법 체계를 가진다.

  • 객체 생성이 불가하다.

  • 최상단에 열거할 값들을 작성해야 한다.

  • 단순 열거형으로 사용할 경우 값을 부여하지 않아도 된다.

  • 멤버 변수를 만들어 객체 형태로 사용할 수 있다. 단, 생성자를 구현해야 한다.

  • public 생성자를 가질 수 없으며, 기본 생성자는 private 이다.

  • 상속이 불가하다.

데모 1 : 기본 형태의 Enum

Week.java
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은 다음 상수 형태로 표현이 가능하다

Week.java
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

Week.java
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의 생성자는 public일 수 없다.

이 예제를 통해 단순 상수 선언보다 Enum은 더 많은 데이터와 기능을 묶어서 가질 수 있음을 알 수 있다.

데모 3 : valueOf() 의 활용

Holiday.java
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