enum
은 열거형(enumerated type) 이라고 부릅니다. 열거형은 서로 연관된 상수들의 집합입니다. enum 은 사실상 class 이며 선언 방법은 아래와 같습니다.
enum Fruit_enum {
APPLE, GRAPE, BANANA;
}
위의 코드를 기존의 java 코드로 적어보면 아래와 같습니다.
class Fruit {
public static final Fruit APPLE = new Fruit();
public static final Fruit GRAPE = new Fruit();
public static final Fruit BANANA = new Fruit();
private Fruit(){} // 생성자의 접근 제어자가 private
}
Fruit 클래스에 각각의 인스턴스를 생성하고, 클래스 생성자의 접근 제어자를 private 으로 선언함으로써 인스턴스의 생성과 상속을 방지합니다. 기존에 자주 사용되던 패턴을 단순화 시키고, enum
을 붙여 클래스의 목적이 열거임을 명확히 나타낼 수 있습니다.
Enum
은 자체가 클래스이므로 생성자, 필드, 메소드를 가질 수 있습니다.
public class EnumTest {
public static void main(String[] args){
Fruit_enum fruit = Fruit_enum.APPLE;
switch (fruit) {
case APPLE:
System.out.println("apple " + fruit.getColor());
break;
case BANANA:
System.out.println("banana" + fruit.getColor());
break;
case GRAPE:
System.out.println("grape" + fruit.getColor());
break;
}
}
}
enum Fruit_enum {
APPLE("red"), GRAPE("green"), BANANA("yellow");
private String color;
public String getColor() {
return this.color;
}
Fruit_enum(String color) {
this.color = color;
}
}
enum
은 열거형이므로 배열처럼 인스턴스들을 몰라도 values 메소드를 이용하여 인스턴스들을 호출할 수 있습니다.
for (Fruit_enum fruit_enum : Fruit_enum.values()) {
System.out.println(fruit_enum + " color : " + fruit_enum.getColor());
}
Reference
생활코딩(상수와 enum)