Enum은
Enumeration의 약자로 "열거, 목록, 일람표" 라는 뜻을 가지고 있다.
즉, Enum은 상수값을 대표하는 이름들의 집합을 이루는 자료형이다.
대표적으로 '요일(7가지)' 이나 '계절(4가지)', '주사위(6가지)' 같은 예제를 들 수 있으며, 이와 같이 한정된 데이터 묶음을 Enum으로 묶어주면 구조적으로 프로그래밍이 가능하다.
// 요일 열거 타입
enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
//할당
week = Week.MONDAY
// 계절 열거 타입
enum Season {
Spring,
Summer,
Autumn,
Winter
}
//할당
season = Season.Spring
// 주사위 열거 타입
enum Dice {
One,
Two,
Three,
Four,
Five,
Six
}
Enum 타입은 primitive 타입이 아닌 referece 타입으로 분류되며, 그래서 enum 상수값은 힙(heap) 영역에 저장된다.
그래서 같은 enum 타입 변수 끼리 같은 상수 데이터를 바라봄으로써 둘이 주소를 비교하는 == 연산 결과는 true가 된다.
Season now = null; // 참조 타입이기 때문에 null도 저장 가능
now = Season.Spring;
// 주소값 비교
System.out.println(today == Season.Spring); // true
Season se = Season.Spring;
// 열거 객체의 문자열을 리턴
String season = se.name();
System.out.println(season); // Spring
Season se = Season.Spring;
// 열거 객체의 문자열을 리턴
int seasonNum = se.ordinal();
System.out.println(season); // 0
Season se1 = Season.Spring; // 0
Season se2 = Season.Winter; // 3
// 열거 객체가 매개값의 열거 객체보다 순번이 빠르다 → 음수를 리턴
int compare1 = se1.compareTo(se2); // Winter 기준으로 Spring 위치 (3에서 0가 되기 위한 값)
System.out.println(compare1); // -3
int compare2 = se2.compareTo(se1);
System.out.println(compare2); // 3
// 문자열을 입력받아서 일치하는 열거 객체를 리턴
Season se3 = Season.valueOf("Spring"); // se3 변수는 Season.Spring 열거 객체를 참조하게 됨
System.out.println(se3); // Spring
-values() -> 열거 타입의 모든 열거 객체들을 배열로 만들어 리턴
// 모든 열거 객체들을 배열로 리턴
Season[] se4 = Season.values();
System.out.println(Arrays.toString(se4)); //
[Spring, Summer, Autumn, Winter]
for (Season type : Season.values()) { // 열거 순회
System.out.println(type); // 순서대로 열거 객체 출력
}