[Java] enum (열거형)

kai6666·2022년 5월 22일
0

TIL. Java

목록 보기
15/21

enum (열거형)

열거형은 서로 관련된 여러 상수를 편리하게 선언하기 위한 것이다. 관련된 여러 상수란 사계절이 될 수도 있고, 게임의 규칙이 될 수도 있다. 한정되고, 정해진 값을 쓰는 데이터 타입이기 때문에 경우를 나눠야 할 때 많이 사용한다.

enum 열거형이름 { 상수명1, 상수명2, 상수명3, ... }
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, NAVY, PURPLE }

열거형을 정의하는 방법은 위와 같다. 상수는 대소문자 모두 표현 가능하지만, 통상적으로는 대문자 작성을 한다.

Rainbow firstColor = Rainbow.RED;
Rainbow eighthColor = null;

열거형은 데이터 타입이기 때문에 변수를 선언하고 대입할 수 있다. 위 코드를 보면 열거 타입이 참조 타입이기 때문에 null 선언도 가능하다는 것을 알 수 있다. 참조 타입은 객체를 참조하는 변수이므로, 열거 상수로 열거 객체를 생성할 수 있음도 알 수 있다.

enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, NAVY, PURPLE}

public class EnumPractice {
    public static void main(String[] args) {
        System.out.println(Rainbow.RED); // RED

열거형에 정의된 상수는 클래스의 static변수를 참조하는 것과 동일하게 '열거형이름.상수명 방법으로 사용할 수 있다. 아래는 열거형을 활용해 간단히 적어본 예제 코드이다.

enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, NAVY, PURPLE}

public class EnumPractice {
    public static void main(String[] args) {
        Rainbow r1 = Rainbow.RED;
        Rainbow r2 = Rainbow.ORANGE;
        Rainbow r3 = Enum.valueOf(Rainbow.class, "RED");

        System.out.println("r1 = " + r1);
        System.out.println("r2 = " + r2);
        System.out.println("r3 = " + r3);

        System.out.println("r1 = r2 ? " + (r1 == r2));
        System.out.println("r1 = r3 ? " + (r1 == r3));
        System.out.println("r1.equals(r3) ? " + (r1.equals(r3)));

        switch(r1){
            case RED:
                System.out.println("The color is RED.");
                break;
            case ORANGE:
                System.out.println("The color is ORANGE.");
                break;
            case YELLOW:
                System.out.println("The color is YELLOW.");
                break;
            default:
                System.out.println("Invalid color.");
        }

        Rainbow[] rainbowArr = Rainbow.values();

        for(Rainbow r : rainbowArr)
            System.out.printf("%s=%d%n", r.name(), r.ordinal());


    }
}
// 출력:
//r1 = RED
//r2 = ORANGE
//r3 = RED
//r1 = r2 ? false
//r1 = r3 ? true
//r1.equals(r3) ? true
//The color is RED.
//RED=0
//ORANGE=1
//YELLOW=2
//GREEN=3
//BLUE=4
//NAVY=5
//PURPLE=6

✨ 열거형 사용시 주의사항

  • 열거형 상수간 비교에 ==는 사용 가능하나, <, >와 같은 비교연산자는 사용할 수 없다.
  • 비교가 필요할 때는 compareTo()를 쓸 수 있다. int 타입으로 리턴되며, 비교값을 주어진 매개값과 비교해서 순번 차이를 리턴하는 열거 객체 메서드이다.
  • 값이 같아도 타입이 다르면 컴파일 에러가 발생한다. 이는 자바의 열거형이 타입에 안전한 열거형(typsesafe enum)이기 때문이다. 이 장점으로 인해 논리적 오류를 줄일 수 있다.
  • switch문 조건식에 사용시, case문에 상수명만 적어야 한다.
profile
성장 아카이브

0개의 댓글