프로그래밍 언어에서는 열거 타입을 제공하는 경우가 많다. 요일이나 계절처럼 한정된 개수의 값들을 하나로 묶어서 사용하고 싶을 때, 열거 타입을 사용하면 편하다. 자바에서는 Enum 타입을 통해서 이런 종류의 데이터를 사용할 수 있다.
enum 사용법
enum 선언
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, STURDAY, SUNDAY;
}
enum 타입의 데이터를 선언하기 위해서는 'enum' 키워드를 이용해야한다. enum 키워드 뒤에 열거 타입의 이름을 쓰고, 중괄호를 연 다음 값들을 나열해서 사용하면 된다.
enum의 정의에 나열된 값들은 0부터 순차적으로 1씩 증가하는 값을 갖게 된다. 자바에서는 enum의 값들을 클래스처럼 사용할 수도 있다. 예를 들어
public enum Weeks {
MONDAY("mon", 10),
TUESDAY("tue", 20),
WEDNESDAY("wed", 30),
THURSDAY("thu", 40),
FRIDAY("fri", 50),
STURDAY("sat", 60),
SUNDAY("sun", 70);
private final String name;
private final int value;
private Weeks(String name, int value) {
this.name = name;
this.value = value;
}
public String getName() {
return this.name;
}
public int getValue() {
return this.value;
}
}
이런식으로 클래스처럼 선언해서 사용할 수도 있다.
enum 메소드
values()
enum 타입의 모든 값들을 배열로 만들어 리턴해주는 메소드다.
for (Weeks week : Weeks.values()) {
System.out.println(week.getName());
}
이 코드를 실행하면
이런 결과를 얻는다.
ordinal()
ordinal() 메소드는 전체 enum 중 현재 값이 몇 번째인지 알려준다.
Weeks wed = Weeks.WEDNESDAY;
System.out.println(wed.ordinal());
순서 값은 배열과 마찬가지로 0부터 시작한다.
valueOf(), name()
valueOf() 메소드는 문자열을 이용해서 enum 값을 얻어오는 메소드다.
Weeks week = Weeks.valueOf("MONDAY");
System.out.println(week.getName());
name() 메소드는 반대로 enum 타입의 값이 가지고 있는 문자열을 리턴한다.
Weeks week = Weeks.valueOf("MONDAY");
System.out.println(week.name());
여기서 리턴되는 문자열을 valueOf()의 인자로 입력하면 역으로 enum 값을 얻어올 수 있다.
compareTo()
두 enum 값을 비교할 수 있다.
Weeks mon = Weeks.MONDAY;
Weeks tue = Weeks.TUESDAY;
Weeks wed = Weeks.WEDNESDAY;
Weeks thu = Weeks.THURSDAY;
System.out.println(mon.compareTo(Weeks.TUESDAY));
System.out.println(tue.compareTo(Weeks.TUESDAY));
System.out.println(wed.compareTo(Weeks.TUESDAY));
System.out.println(thu.compareTo(Weeks.TUESDAY));
인자로 넘겨준 enum 값과 비교해서 전후로 몇 번째에 위치하는지를 나타낸다. 만약 enum 객체의 매개값의 enum 객체보다 순번이 빠르다면 음수가 리턴되고, 같다면 0, 순번이 늦다면 양수가 리턴된다.
댓글