티스토리 뷰
enum
상수를 간편한 선언으로 한정된 데이터를 관리 가능하나 컴파일 시점에서 오류가 나면 발견하기 어려워
범위 내의 값인지 판별하는 작업이 필요한데 이때 열거형(enum type)이 필요하다
[접근제한자] enum 열거타입명 {
// 중괄호 내에는 값을 갖는 상수 이름만 나열(별도의 값을 지정하지 않음)
상수, 차례대로, 나열; // 대문자로 쓰임, 각각 하나의 객체
}
- 클래스, 인터페이스 정의 문법과 유사하나 중괄호 내에는 상수로 사용될 이름만 지정
- 지정된 상수 외 다른 값은 전달이 불가능하다.
public class Ex2 {
public static void main(String[] args) {
Ex2 ex2 = new Ex2();
// compareEnum(); // static 이라서 안됨
// ex2.compareEnum(Season.SPRING); // 객체로 접근
// ex2.compareEnum(Season.SUMMER); // 객체로 접근
ex2.cEnum(Season.FALL); // FALL : 2 하반기!
ex2.cEnum(Season.SPRING); // SPRING : 0 봄!
}
public void cEnum(Season s) { // enum 타입(Season타입) 객체(s) 전달
System.out.println(s.name() + " : " + s.ordinal());
if(s==Season.SPRING) {
System.out.println("봄!");
} else if(s==Season.SUMMER) {
System.out.println("여름!");
} else if(s.compareTo(s.WINTER) >= -1) {
System.out.println("하반기!");
}
}
}
enum Season { // ordinal 각각 0, 1, 2, 3
// enum 타입 내의 상수는 자동으로 ordinal 값(순서번호) 부여 (0부터 자동으로 부여)
SPRING, SUMMER, FALL, WINTER
}
name() 메서드
상수명 리턴
ordinal() 메서드
상수의 ordinal 값 리턴
season 객체의 ordinal 값 - 파라미터로 전달된 상수의 ordinal 값 결과를 리턴
public class Test1 {
public static void main(String[] args) {
Week w = Week.MON; // 주중!
switch (w) {
case MON:
case TUE:
case WED:
case THUR: System.out.println("주중!"); break;
case FRI: System.out.println("불금!"); break;
case SAT:
case SUN: System.out.println("주말^^"); break;
}
}
}
enum Week {
MON, TUE, WED, THUR, FRI, SAT, SUN;
}
댓글