열거형 (enum)
열거형은 이름을 가진 상수들을 리스트로 관리할 수 있게 해 준다.
각 상수들은 특정 값을 가질 수 있으며 새로운 데이터 타입으로 사용하는 것도 가능하다.
열거형은 enum 키워드로 정의되며 열거형 내부에 선언된 상수를 열거형 상수라고 한다.
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY;
}
values()
values()는 컴파일러가 자동으로 생성하는 정적 메서드로 열거형의 모든 원소를 배열로 반환한다.
values()의 시그니처는 아래 코드와 같다.
public static enum_type[] values();
따라서 아래 코드처럼 enum의 원소를 순회하는 것이 가능하다.
class Example {
public static void main(String[] args) throws InterruptedException {
Week today = Week.MONDAY; // Week 열거형 사용
System.out.println("Today is: " + today); // Monday 출력
// 모든 열거형 원소 순회
for (Week day : Week.values())
System.out.println(day);
}
}
valueOf()
문자열로 지정된 이름과 동일한 열거형 원소를 반환한다.
valueOf()의 시그니처는 아래 코드와 같다.
public static enum_type valueOf(String name);
만약 주어진 이름과 일치하는 열거형 원소가 없을 때에는 IllegalArgumentException 예외가 발생하고
name이 null일 때에는 NullPointerException 예외가 발생한다.
객체로서 enum
Java는 객체지향언어로 Java의 enum은 단순한 상수들의 집합이 아니라 하나의 완전한 객체로서 동작한다.
따라서 열거형에 인스턴스 변수, 생성자, 메서드 등을 적용할 수 있고 객체와 마찬가지로 생성자의 오버로딩도 가능하다.
enum Week {
MONDAY(0),
TUESDAY(1),
WEDNESDAY(2),
THURSDAY(3),
FRIDAY(4),
SATURDAY(5),
SUNDAY(6);
private int day;
Week(int new_day) { day = new_day; }
int getDay() { return day; }
}
class Example {
public static void main(String[] args) throws InterruptedException {
// 모든 열거형 원소 순회
for (Week day : Week.values())
System.out.println(day + " : " + day.getDay());
}
}
열거형은 클래스 타입으로 간주되긴 하지만 오브젝트를 생성하지는 않는다.
java.lang.Enum
java.lang.Enum은 모든 열거형의 슈퍼클래스로 여러 가지 유용한 메서드를 제공하고 있다.
- final int ordinal()
열거 상수의 순서 값을 리턴한다.
- final int compareTo(enum_type e)
열거 상수의 순서 값을 다른 상수와 비교한다.
해당 열거형 상수의 순서 값에서 e의 순서 값을 뺀 값을 리턴한다.
- final bool equals(enum_type e)
해당 열거형의 상수의 순서 값이 e의 순서 값과 동일하면 true, 그렇지 않으면 false를 반환한다.
enum Week {
MONDAY(1),
TUESDAY(2),
WEDNESDAY(3),
THURSDAY(4),
FRIDAY(5),
SATURDAY(6),
SUNDAY(7);
private int day;
Week(int new_day) { day = new_day; }
int getDay() { return day; }
}
class Example {
public static void main(String[] args) throws InterruptedException {
Week today = Week.MONDAY; // Week 열거형 사용
Week tomarrow = Week.TUESDAY;
System.out.println(today.ordinal());
System.out.println(tomarrow.ordinal());
System.out.println(today.compareTo(tomarrow));
System.out.println(today.equals(tomarrow));
}
}
'Java > Java 문법' 카테고리의 다른 글
[Java] String 클래스 (0) | 2024.12.02 |
---|---|
[Java] 박싱, 언박싱, 래퍼클래스(Wrapper Class), Integer, Character (0) | 2024.12.01 |
[Java] 레이스 컨디션 (Race Condition), 스레드 동기화 (synchronized) (0) | 2024.12.01 |
[Java] 스레드(Thread), 모니터(Monitor), Runnable 인터페이스 (0) | 2024.10.27 |
[Java] 예외 처리 (검사형 예외, 비검사형 예외) (0) | 2024.10.27 |