본문 바로가기
Language/Java

enum 클래스 활용하기

by codeyaki 2023. 9. 6.
반응형

예전에는 enum을 잘 사용하지 않다가 최근에서야 enum 클래스를 활용하기 시작했다. 

확실히 enum 클래스를 사용하면 코드만 읽고도 의미를 확실하게 알 수 있어 좀 더 좋은 코드가 되는 것 같다.

enum을 좀 더 잘 활용하기 위해서 정리하는 시간을 한번 갖으려고 한다.

Enum이란?

enum클래스는 JDK 1.5에 나온 기능이다.

열거체를 정의할 수 있는 기능으로 상수를 클래스처럼 보이게 해 준다.

장점

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

enum 정의

enum 열거체이름{
    상수1이름, 상수2이름, 상수3이름, ...
}

 

  • 상수를 작성할 때는 대문자를 사용하여 작성한다.
  • ;을 붙이지 않는다.

예시

enum Rainbow{
	RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
}

enum 사용

이렇게 정의한 enum은 다음과 같이 사용할 수 있다.

열거체이름.상수명

예시를 사용한다면

public class Example{
    public static void main(String[] args){
        String myColor = Rainbow.RED
    }
}

enum Rainbow{
	RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
}

java.lang.Enum 클래스

Enum클래스는 모든 enum의 조상 클래스이다.

Enum에는 다양한 메서드들을 포함하고 있다.

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() 메서드

인자로 전달된 문자열과 일치하는 enum 상수를 반환하는 메서드

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() 메서드

해당 상수가 enum에서 정의된 순서(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
    }
}

메서드 요약

static E values() 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환함.
static E valueOf(String name) 전달된 문자열과 일치하는 해당 열거체의 상수를 반환함.
protected void finalize() 해당 Enum 클래스가 final 메서드를 가질 수 없게 됨.
String name() 해당 열거체 상수의 이름을 반환함.
int ordinal() 해당 열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)를 반환함.

상수에 값 추가하기

상수값을 따로 지정해주지 않으면 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; }
}

 

 

참고 사이트

http://www.tcpschool.com/java/java_api_enum

 

반응형