Language/Java

[Java] 자바 API 클래스 - Enum 클래스

재은초 2024. 4. 13. 12:49
반응형

java.lang 패키지

  • java.lang 패키지는 자바에서 가장 기본적인 동작을 수행하는 클래스들의 집합이다. 따라서 자바에서는 java.lang 패키지의 클래스들은 import 문을 사용하지 않아도 클래스 이름만으로 바로 사용할 수 있다.

 

열거체(enumeration type)

  • JDK 1.5 이전의 자바에서는 열거체를 사용할 수 없었지만 JDK 1.5부터는 C언어의 열거체보다 더욱 향상된 성능의 열거체를 정의한 Enum 클래스를 사용할 수 있게 되었다.

열거체 장점

  • 열거체를 비교할 때 실제 값뿐만 아니라 타입까지도 체크한다.
  • 열거체의 상숫값이 재정의되더라도 다시 컴파일할 필요가 없다.

열거체의 정의 및 사용

  • 자바에서는 enum 키워드를 사용하여 열거체를 정의하고, .을 이용해 사용한다.
enum 열거체이름 { 상수1이름, 상수2이름, ... }     // 열거체 정의
열거체이름.상수이름                             // 열거체 사용
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
Rainbow.RED

열거체의 상숫값 정의 및 추가

  • 정의된 열거체의 첫 번째 상숫값은 0부터 설정되며, 그다음은 바로 앞의 상숫값보다 1만큼 증가되며 설정된다.
  • 불규칙한 값을 상숫값으로 설정하고 싶으면 상수의 이름 옆에 괄호(())을 추가하고, 그 안에 원하는 상숫값을 명시할 수 있다. 하지만 이때에는 불규칙한 특정 값을 저장할 수 있는 인스턴스 변수와 생성자를 별도로 추가해야만 한다.
enum Rainbow {
    RED(3), ORANGE(10), YELLOW(21), GREEN(5), BLUE(1), INDIGO(-1), VIOLET(-11);

    private final int value;
    Rainbow(int value) { this.value = value; }
    public int getValue() { return value; }
}

 

java.lang.Enum 클래스

  • Enum 클래스는 모든 자바 열거체의 공통된 조상 클래스다.

values() 메소드

  • values() 메소드는 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환한다.
  • values() 메소드는 자바의 모든 열거체에 컴파일러가 자동으로 추가해 주는 메소드다.
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }

public class Enum01 {
    public static void main(String[] args) {
        Rainbow[] arr = Rainbow.values();
        for (Rainbow rb : arr) {
            System.out.println(rb);
        }
    }
}

>> RED
>> ORANGE
>> YELLOW
>> GREEN
>> BLUE
>> INDIGO
>> VIOLET

valueOf() 메소드

  • valueOf() 메소드는 전달된 문자열과 일치하는 해당 열거체의 상수를 반환한다.
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }

public class Enum02 {
    public static void main(String[] args) {
        Rainbow rb = Rainbow.valueOf("GREEN");
        System.out.println(rb);
    }
}

>> GREEN

ordinal() 메소드

  • ordinal() 메소드는 해당 열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)를 반환한다.
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }

public class Enum03 {
    public static void main(String[] args) {
        int idx = Rainbow.YELLOW.ordinal();
        System.out.println(idx);
    }
    
>> 2

Enum 메소드들

 

Reference

반응형