Back-End (Web)/JAVA

[JAVA] 열거형 ( Enum )

JABHACK 2024. 11. 22. 09:20

열거형 ( Enum )

📌 상수들의 집합을 정의하는 자료형입니다.

  • 일반적으로 정수나 문자열로 정의할 수 있는 여러 상수들을 열거형을 사용하여 보다 의미 있게 묶을 수 있습니다.
public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    // 0      1       2             3        4         5       6
}

 

  • 열거형을 사용하면 자동적으로 0부터 시작하는 정수값이 할당됩니다
class Card{
	enum Kind { A, B, C }
    enum Value { test1, test2 }
    
    if(Card.Kind.A==Card.Value.test1) {} // 이거 타입이 달라 비교불가 에러난다.

}
  • 열거형으로 상수를 정의한 경우 값을 비교하기 전에 타입을 먼저 맞춰본다. 즉, 설령 값이 같아도 타입이 다르면 에러가 난다.

 

열거형의 특징

  • 상수값을 그룹화하여 코드의 가독성을 높입니다.
  • 타입 안전을 보장하여 잘못된 값을 사용할 가능성을 줄입니다.
  • 각 상수에 (예: 정수, 문자열 등)을 할당할 수 있으며, 그 값을 활용할 수 있습니다.
  • equals()가 아닌 '=='으로 비교가 가능하다

 

열거형(Enum)에는 맴버(필드, 메서드 등)를 추가할 수 있습니다. 각 열거형 상수는 고유한 상태동작을 가질 수 있도록 설계할 수 있습니다. 이를 통해 열거형 상수마다 다른 값을 저장하거나 다른 행동을 할 수 있습니다.

 

열거형에 필드, 생성자, 메서드 추가하기

  1. 필드 추가: 열거형 상수에 추가적인 값을 할당할 수 있습니다.
  2. 생성자 추가: 열거형 상수를 초기화할 때 사용하는 생성자를 추가합니다.
  3. 메서드 추가: 각 열거형 상수가 자신의 동작을 정의할 수 있는 메서드를 추가합니다.
public enum Day {
    MONDAY(1, "Start of the work week"),
    TUESDAY(2, "Second day of the work week"),
    WEDNESDAY(3, "Middle of the work week"),
    THURSDAY(4, "Almost there"),
    FRIDAY(5, "Last day of the work week"),
    SATURDAY(6, "Weekend!"),
    SUNDAY(7, "Weekend!");

    private final int dayNumber;   // 필드: 요일의 숫자
    private final String message;  // 필드: 요일에 대한 메시지

    // 생성자: 열거형 상수마다 값 초기화
    Day(int dayNumber, String message) {
        this.dayNumber = dayNumber;
        this.message = message;
    }

    // getter 메서드
    public int getDayNumber() {
        return dayNumber;
    }

    public String getMessage() {
        return message;
    }

    // 특정 동작을 정의하는 메서드
    public void printDetails() {
        System.out.println(dayNumber + ": " + message);
    }
}

public class Main {
    public static void main(String[] args) {
        Day today = Day.MONDAY;
        System.out.println(today.getDayNumber());  // 출력: 1
        System.out.println(today.getMessage());    // 출력: Start of the work week
        today.printDetails();  // 출력: 1: Start of the work week
    }
}

 

더보기

설명

  1. 필드: dayNumber와 message는 각 요일에 대한 추가적인 정보를 저장하는 필드입니다.
  2. 생성자: Day(int dayNumber, String message) 생성자는 열거형 상수에 값(숫자와 메시지)을 할당합니다.
  3. 메서드:
    • getDayNumber()와 getMessage()는 각 요일의 숫자와 메시지를 반환하는 메서드입니다.
    • printDetails()는 각 요일의 정보를 출력하는 메서드입니다

 

상속 관계에서의 열거형 사용

열거형은 다른 클래스를 상속할 수 없지만, 인터페이스를 구현할 수 있습니다. 예를 들어, 모든 연산을 Operation 인터페이스로 정의하고, 각 열거형에서 apply 메서드를 구현할 수 있습니다.

public interface Operation {
    double apply(double x, double y);
}

public enum MathOperation implements Operation {
    ADD {
        @Override
        public double apply(double x, double y) {
            return x + y;
        }
    },
    SUBTRACT {
        @Override
        public double apply(double x, double y) {
            return x - y;
        }
    };

    // 추가 메서드를 열거형에 정의할 수도 있음
}

 

 

 

'Back-End (Web) > JAVA' 카테고리의 다른 글

[JAVA] JAVA 웹 기술의 역사  (0) 2024.12.12
[JAVA] HASH란 무엇인가  (1) 2024.11.21
[JAVA] 자바의 정렬  (0) 2024.11.21
[JAVA] 응용 정리  (1) 2024.11.15
[JAVA] NULL  (0) 2024.11.13