열거형(Enum, Enumeration)
열거형(Enum)은 서로 관련된 상수들을 같이 묶어 놓은 것을 의미한다.
Java에서 열거형은 클래스의 유형이다. 클래스와 마찬가지로 생성자를 제공하고, 인스턴스 변수와 메서드를 추가할 수 있고, 인터페이스를 구현할 수도 있다.
Java 열거형은 타입 안정성을 제공하여 잘못된 값이 사용되는 것을 방지해 준다.
열거형은 클래스와 비슷하지만 다른 클래스를 상속할 수 없으며 확장될 수 없다.
모든 열거형 상수는 항상 암시적으로 public static final이다. 그러므로 이름을 통해서 접근이 가능하다.
열거형의 주요 목적은 자체 데이터 유형을 정의하는 것이다.
Enum 선언
선언은 클래스 외부나 내부에서 수행할 수 있지만 메서드 내부에서는 수행할 수 없다.
enum Direction { EAST, SOUTH, WEST, NORTH }
여기서 주의할 점으로는 Enum 내부의 첫 번째 줄은 상수 목록이어야 한다.
enum Direction {
private static final int TEST = 5,
EAST, SOUTH, WEST, NORTH,
}
위의 코드와 같이 TEST라는 상수가 첫 번째 줄에 위치하면 에러가 발생하게 된다.
Enum 사용
Direction d1 = Direction.EAST;
Direction d2 = Direction.valueOf("WEST");
Direction d3 = Enum.valueOf(Direction.class, "EAST");
위의 코드와 같이 열거형의 모든 상수는 항상 static이기 때문에 이름으로 접근이 가능하다.
Enum 클래스가 가지고 있는 메서드를 통해서 값 저장이 가능하다.
System.out.println("d1.compareTo(d3) " + (d1.compareTo(d3)));
System.out.println("d1.compareTo(d2) " + (d1.compareTo(d2)));
// System.out.println("d1 > d3 " + (d1 > d3)); // 열거형은 비교 연산자 사용 불가
열거형에서는 비교 연산자를 사용할 수 없기 때문에 따로 compareTo 메서드를 사용하여 값을 비교해야 된다.
Direction[] dArr = Direction.values(); // values()는 열거형의 모든 상수를 배열로 반환해준다.
for (Direction d : dArr) {
System.out.printf("%s = %d%n", d.name(), d.ordinal()); // name()은 상수의 이름을 ordinal()은 순서를 알려준다.
}
values() 메서드를 통해서 열거형의 모든 상수를 배열로 받을 수 있고 각 요소들에 접근하여 name(), ordinal() 메서드를 사용하여 이름과 순서를 알 수 있다.
사용자 정의된 값이 있는 열거형
enum Direction1 {
EAST(1, ">"), SOUTH(2, "v"), WEST(3, "<"), NORTH(4, "^");
private static final Direction1[] DIR_ARR = Direction1.values();
private final int value;
private final String direct;
Direction1(int value, String direct) {
this.value = value;
this.direct = direct;
}
}
열거형 상수에 사용자가 값을 지정해 줄 수 있다.
값을 지정하기 위해서는 먼저 인스턴스 변수와 생성자를 새로 추가해줘야 한다.
위의 코드를 통해 열거형 상수의 괄호 안에 값들이 생성자를 통해서 저장되는 것을 알 수 있다.
열거형 생성자는 암묵적으로 private이므로 외부에서 객체 생성이 불가능하다.
'자바' 카테고리의 다른 글
Java - 내부 클래스 (0) | 2023.11.11 |
---|---|
Java - Exception (0) | 2023.11.11 |
Java - 배열 (1) | 2023.11.09 |
Java - 문자와 문자열 (0) | 2023.11.06 |
Java - 제어문 (0) | 2023.11.04 |