Java의 enum
은 열거형 타입을 정의하는 데 사용되며, 상수들을 더 안전하고 구조적으로 관리할 수 있게 해줍니다. enum
은 단순히 상수들의 집합일 뿐만 아니라, 클래스처럼 동작하여 메서드, 필드, 인터페이스 구현 등을 포함할 수 있습니다.
기본 사용법:
enum
은 상수들을 정의하는 데 사용됩니다. 각 상수는 암묵적으로 public static final
입니다.
public enum Grade {
BASIC,
GOLD,
DIAMOND
}
메서드와 필드 추가:
enum
타입은 메서드와 필드를 가질 수 있습니다. 이를 통해 더 복잡한 동작을 정의할 수 있습니다.
public enum Grade {
BASIC(1),
GOLD(2),
DIAMOND(3);
private final int level;
Grade(int level) {
this.level = level;
}
public int getLevel() {
return level;
}
}
생성자:
enum
의 생성자는 private
이어야 합니다. 이는 enum
상수들이 고정된 집합임을 보장합니다.
인터페이스 구현:
enum
은 인터페이스를 구현할 수 있습니다. 이를 통해 다형성을 제공할 수 있습니다.
public interface Describable {
String getDescription();
}
public enum Grade implements Describable {
BASIC {
public String getDescription() {
return "Basic level";
}
},
GOLD {
public String getDescription() {
return "Gold level";
}
},
DIAMOND {
public String getDescription() {
return "Diamond level";
}
}
}
상속:
enum
은 다른 클래스나 enum
을 상속할 수 없습니다. 모든 enum
은 java.lang.Enum
클래스를 직접 상속합니다.
Java enum
타입에는 몇 가지 기본적으로 제공되는 메서드가 있습니다. 이들 메서드는 java.lang.Enum
클래스에서 상속받은 메서드들입니다.
values():
모든 열거형 상수들을 배열로 반환합니다.
for (Grade grade : Grade.values()) {
System.out.println(grade);
}
valueOf(String name):
주어진 이름과 일치하는 열거형 상수를 반환합니다. 이름이 일치하지 않으면 IllegalArgumentException
이 발생합니다.
Grade grade = Grade.valueOf("GOLD");
name():
열거형 상수의 이름을 문자열로 반환합니다.
String name = Grade.GOLD.name();
ordinal():
열거형 상수가 정의된 순서를 반환합니다(0부터 시작).
int ordinal = Grade.GOLD.ordinal();
다음은 위의 개념들을 포함한 예제 코드입니다.
public interface Describable {
String getDescription();
}
public enum Grade implements Describable {
BASIC(1) {
public String getDescription() {
return "Basic level";
}
},
GOLD(2) {
public String getDescription() {
return "Gold level";
}
},
DIAMOND(3) {
public String getDescription() {
return "Diamond level";
}
};
private final int level;
Grade(int level) {
this.level = level;
}
public int getLevel() {
return level;
}
public static void main(String[] args) {
for (Grade grade : Grade.values()) {
System.out.println("Grade: " + grade.name() + ", Level: " + grade.getLevel() + ", Description: " + grade.getDescription());
}
Grade gold = Grade.valueOf("GOLD");
System.out.println("Gold ordinal: " + gold.ordinal());
}
}
enum
은 상수들의 집합을 정의하며 클래스처럼 동작할 수 있습니다.enum
은 생성자, 메서드, 필드를 가질 수 있습니다.enum
은 인터페이스를 구현할 수 있지만 상속은 불가능합니다.enum
은 values()
, valueOf()
, name()
, ordinal()
등의 기본 메서드를 제공합니다.이러한 기능들을 통해 enum
을 유연하게 사용하여 코드의 가독성과 유지보수성을 높일 수 있습니다.