[강의] Java 열거형(Enum)

Jerry·2025년 7월 10일

Topic

Enum

What I Learned

열거형(Enum)

정의

  • 서로 관련된 상수들을 하나의 그룹으로 묶어 표현할 수 있는 특별한 데이터 타입입니다.
  • Java에서는 enum 키워드를 사용해 타입을 정의하며 각 상수는 암묵적으로 public static final로 선언됩니다.

메소드

  • values() 모든 enum 상수를 배열로 반환
  • valueOf(String name) 문자열에 해당하는 enum 상수 반환
  • name() enum 상수의 이름(String) 반환
  • ordinal() 선언된 순서(0부터 시작) 반환
  • equals(Object o) 같은 enum인지 여부 반환
  • compareTo(Enum e) ordinal 값의 차이 반환
  • toString() 문자열로 반환(오버라이드 가능)
  • getDeclaringClass() enum 클래스 반환

상수 클래스

  • 상수 클래스는 public static final로 선언된 상수들을 모아놓은 클래스입니다.
  • Java 1.5 이후에는 Enum을 권장합니다.

열거형 다중 속성

  • 열거형에서 각 상수는 여러 개의 속성을 가질 수 있으며 생성자를 통해 값을 초기화할 수 있습니다.
  • 이를 통해 각 상수를 객체처럼 취급하며 다양한 정보를 함께 저장하고 메소드도 정의할 수 있습니다.
public enum Day {
	MONDAY(0, "월"), TUESDAY(1, "화"), WEDNESDAY(2, "수"),
    THURSDAY(3, "목"), FRIDAY(4, "금"), SATURDAY(5, "토"), SUNDAY(6, "일");
    
    private final int value;
    private final String korean;
    
    Day(int value, String korean) {
    	this.value = value;
        this.korean = korean;
    }
    
    public int getValue() { return value; }
    
    public String getKorean() { return korean; }
    
    public int dayBetween(Day other) {
    	return Math.abs(this.value - other.value);
    }
}

열거형 메소드 및 switch 인자 활용

  • 열거형은 상수 별로 메소드를 가질 수 있고 객체처럼 동작하여 내부 값을 다룰 수 있습니다.
  • switch 문의 인자로 사용할 수 있어 조건 분기 시 가독성과 안전성을 높여줍니다.
public enum Operation {
	PLUS, MINUS, MULTIPLY, DIVIDE;
    double apply(double x, double y) {
    	switch (this) {
        	case PLUS: return x + y;
            case MINUS: return x - y;
            case MULTIPLY: return x * y;
            case DIVIDE: return x / y;
            default: throw new AssertionError("Unknown operation: " : this);
            }
        }
    }
}
double x = 2.0;
double y = 4.0;
for (Operation op : Operation.values()) {
	System.out.printf("%f %s %f = "%f%n", x, op, y, op.apply(x, y));
}

열거형 메소드 상속

열거형에서는 추상 메소드 선언이 가능하며 각 상수는 추상 메소드를 상속받아 개별적으로 오버라이딩해야 합니다.

public enum Operation2 {
	PLUS("+") {
    	@Override
        double apply(double x, double y) { return x + y; }
    },
    MINUS("-") {
    	@Override
        double apply(double x, double y) { return x - y; },
    MULTIPLY("*") {
    	@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;
    
    Opreation2(String symbol) { this.symbol = symbol; }
    
    @Override
    public String toString() { return symbol; }
    
    abstract double apply(double x, double y);
}

To study

profile
Backend engineer

0개의 댓글