미리 정의된 상수들의 특별한 집합. 즉, 상수들을 열거한 것이 enum이다.
enum에 열거된 상수들은 추가적인 객체 생성 없이 외부에서 사용 가능하고 불변이다. 기본적으로 final인 상수이기 때문에 모두 대문자로 적는 것을 원칙으로 한다. 다른 class와 마찬가지로 생성자를 만들 수도 있다.기존에는 class 내에서 상수를 선언함으로써 상수를 관리 하였는데 class 내에서 선언하는 부분은 네이밍이 겹칠 수 있고 불 필요하게 상수가 많아지는 단점이 있다. IDE의 지원을 적극적으로 받을 수 없고 타입 안정성이 떨어지는 단점이 있다. 이를 보완하며 나온 것이 enum이다.
특징
- 고정된 값 집합
- enum은 컴파일 시점에 정해진 값 집합을 의미한다. 값은 열거형 정의에 따라 제한된다.
- 타입 안정성 보장
- enum을 사용하면 정해진 값 이외의 값은 사용할 수 없으므로 오류를 방지한다.
- class처럼 동작
- enum은 내부적으로 class로 간주되며, 생성자, 필드, 메서드를 가질 수 있다.
- 내부적으로 상수 객체
- enum 값은 각각 고유의 상수 객체로 생성된다.
- enum 열거형 으로 지정된 상수들은 모두 대문자로 선언
- 문장 종료 시 ; 을 붙이지 않지만 열거 형 상수와 관련된 값을 생성자를 통해 연결 시킬 경우 ; 을 붙여야 한다.
enum의 기본 형태
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY,SATURDAY;
}
enum의 기본 메서드
자바의 모든 enum은 java.lang.Enum class를 상속받으며, 아래의 기본 메서드를 사용할 수 있다.
- values()
- 열거형의 모든 값을 배열로 반환한다.
- ordinal()
- 열거형 상수의 정의 순서를 반환한다.(0부터 시작)
- name()
- 열거형 상수의 이름(문자열)을 반환한다.
- valueOf(String name)
- 문자열 이름에 해당하는 열거형 상수를 반환한다.
enum의 본질
- 자바에서 final클래스로 컴파일된다.