JAVA · 객체지향
Enum — 완전한 활용
Java의 Enum은 단순 상수 이상입니다. 필드, 메서드, 추상 메서드, 인터페이스 구현이 가능합니다.
객체지향중급EnumEnumSetEnumMapabstract methodvalues()
핵심 설명
Java의 Enum은 단순 상수 이상입니다. 필드, 메서드, 추상 메서드, 인터페이스 구현이 가능합니다.
Java code
public enum Planet {
MERCURY(3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6);
private final double mass; // 질량 (kg)
private final double radius; // 반지름 (m)
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
static final double G = 6.67300E-11;
double surfaceGravity() {
return G * mass / (radius * radius);
}
double surfaceWeight(double otherMass) {
return otherMass * surfaceGravity();
}
}
// 추상 메서드를 가진 Enum
enum Operation {
PLUS("+") { @Override double apply(double x, double y) { return x + y; } },
MINUS("-") { @Override double apply(double x, double y) { return x - y; } },
TIMES("*") { @Override double apply(double x, double y) { return x * y; } },
DIVIDE("/") { @Override double apply(double x, double y) { return x / y; } };
private final String symbol;
Operation(String symbol) { this.symbol = symbol; }
abstract double apply(double x, double y);
@Override public String toString() { return symbol; }
}
class Main {
public static void main(String[] args) {
double earthWeight = 75.0;
double mass = earthWeight / Planet.EARTH.surfaceGravity();
for (Planet p : Planet.values()) {
System.out.printf("체중 on %s: %.2f%n",
p, p.surfaceWeight(mass));
}
double x = 10, y = 3;
for (Operation op : Operation.values()) {
System.out.printf("%.1f %s %.1f = %.1f%n",
x, op, y, op.apply(x, y));
}
// Enum 메서드
Planet earth = Planet.valueOf("EARTH");
System.out.println(earth.ordinal()); // 2 (0-based)
System.out.println(earth.name()); // EARTH
}
}학습 팁
EnumSet과 EnumMap은 Enum 전용 컬렉션으로 일반 HashSet/HashMap보다 훨씬 효율적입니다. Enum 기반 컬렉션에는 항상 이를 사용하세요.
주의할 점
==으로 Enum 비교는 완전히 안전합니다. Enum은 싱글턴이므로 ==와 .equals()가 동일하게 동작합니다.
자주 묻는 질문
Enum — 완전한 활용란 무엇인가요?
Java의 Enum은 단순 상수 이상입니다. 필드, 메서드, 추상 메서드, 인터페이스 구현이 가능합니다.
Enum — 완전한 활용 학습 시 주의할 점은 무엇인가요?
== 으로 Enum 비교는 완전히 안전합니다. Enum은 싱글턴이므로 == 와 .equals() 가 동일하게 동작합니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.