Enum 이란
Enum 은 Enumeration 의 약자이다. Enumeration 은 열거, 목록, 일람표 라는 뜻도 갖고 있으나 Java 에선
열거형이라고 부른다.
위키백과에 나와있는 컴퓨터 프로그래밍의 열거형, 이넘(enum) 은
요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다.
열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자다.
자바 Enum 은 상수 컬렉션을 정의하는데 쓰이는 특수한 자바 유형(Type) 이다.
더 정확하게 말하면 Enum 은 특수한 자바 클래스이다. 열거형에는 상수, 메서드 등이 포함될 수 있으며
자바 5 버전부터 추가되었다.
Enum 을 사용하는 이유
- 문자열과 비교해 IDE 의 적극적인 지원을 받을 수 있다.
- 허용 가능한 값들을 제한할 수 있다.
- 리팩토링 시 변경 범위가 최소화 됩니다.
- 내용이 추가될 경우 Enum 코드외는 수정할 필요가 없다.
Enum 정의하는 방법
enum 열거형이름 {
상수명1, 상수명2, 상수명3 ....
}
열거형 상수는 필드를 가질 수 있다. 필드를 추가하는 방법은 private 키워드를 사용하여 필드를 정의하고
생성자를 생성하여 인자로 추가한 뒤 각각 상수에 값을 입력하면 된다.
예시는 아래와 같다.
package com.youth.market.test;
import lombok.Getter;
@Getter
public enum TestEnum {
PLUS(1), MINUS(2), MULTIPLE(3), DEVIDE(4);
private int value;
TestEnum(int value){
this.value = value;
}
}
enum 에서 필드들은 private 로 정의해야 하며 public, default, protected 로 선언시에 컴파일 에러가 발생한다.
enum 타입은 고정된 상수들의 집합으로 enum 에 대한 모든 정보들은 런타임이 아닌 컴파일 할 때 고정되어야 한다.
그래서 컴파일 시 안정성을 보장하기 위해 private 생성자만 사용이 가능하고 다른 패키지나 클래스에서
enum 타입에 접근해서 동적으로 값을 지정할 수 없다.
Enum 이 제공하는 메서드
toString() |
해당 상수의 이름을 문자열로 반환한다. |
name() |
해당 상수의 이름을 문자열로 반환한다. |
compareTo() |
정렬의 기준을 위한 메서드이다. 비교 대상보다 순서가 빠르면 -1, 같으면 0, 느리면 1을 반환한다 정렬 순서는 상수가 선언된 순서가 디폴트로 지정되어 있다. |
ordinal() |
상수의 선언 순서에 따른 인덱스 (Zero based) 값을 반환한다. Enum 안에는 private final int ordinal; 이 정의되어 있고 이를 사용한다. |
valueOf() |
인자로 받은 이름과 같은 Enum 값으로 반환한다. |
values() |
선언된 모든 Enum 값을 순서대로 배열에 담아서 반환한다. |
Enum.values()
열거형의 모든 상수를 배열에 담아 반환한다.
Enum.valueOf()
열거형 상수의 이름으로 문자열 상수에 대한 참조를 얻는다.