enum (열거형)
- 상수(Constant)로 사용할 값들을 미리 선언하여 사용할 때 사용하는 특별한 데이터 타입
장점
- Type Safe한 코드 작성
- 기존 static final 상수선언 방식: 해당 상수의 값만 비교
- enum을 이용한 상수 정의: 값 뿐만 아니라 타입까지도 체크
- 재컴파일 안해줘도 됨
- 기존: 상수값이 변경되는 경우, 해당 상수를 참조하는 소스코드도 모두 재컴파일해줘야함
선언방법
enum 열거형이름 { 상수값1, 상수값2, ..., 상수값n };
기존방식과 비교
static final int A = 0;
static final int B = 1;
static final int C = 2;
static final int D = 3;
enum Data (A, B, C, D);
열거형에서 사용되는 메서드
name()
ordinal()
- 열거형 상수가 정의된 순서값을 반환
- 기본적으로 0부터 시작
valueOf("열거형상수이름")
- 지정된 열거형에서 '열거형상수이름'과 일치하는 열거형상수를 반환한다.
예제
1단계: enum 선언
- T08_EnumTest.java
- 모든 단계는 public class T08_EnumTest {} 내에서 진행됨
기본값을 이용하는 열거형 객체 선언
public enum City {
서울, 부산, 대구, 광주, 대전
};
데이터 값을 임의로 지정한 열거형 객체 선언
- 데이터 값을 정해줄 경우에는 생성자를 만들어서 괄호속의 값이 변수에 저장되도록 해야한다.
public enum Season {
봄("3월부터 5월까지"),
여름("6월부터 8월까지"),
가을("9월부터 11월까지"),
겨울("12월부터 2월까지");
private String str;
Season(String data){
str = data;
}
public String getStr() {
return str;
}
}
2단계: main메서드 내에서 사용
public static void main(String[] args) {
City myCity1;
City myCity2;
myCity2 = City.서울;
myCity1 = City.valueOf("서울");
Season ss = Season.valueOf("여름");
}
Season[] enumArr = Season.values();
for (int i = 0; i < enumArr.length; i++) {
System.out.println(enumArr[i].name() + " : " + enumArr[i].getStr());
}
for (Season season : Season.values()) {
System.out.println(season + " : " + season.getStr());
}
City city = City.대구;
boolean result = city == City.대전
result = city == City.대구
int result2 = city.compareTo(City.대구);
result2 = city.compareTo(City.서울);
result2 = city.compareTo(City.대전);
result2 = city.compareTo(City.서울); // 2
result2 = city.compareTo(City.대전); // -2
이렇게 나오는 이유를 모르겠습니다 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ