Language/Java

[Java] 열거형 (enum) 정리

pongic 2022. 9. 29. 19:46
반응형

열거형(enum)이란?

여러 상수들을 보다 편리하게 선언할 수 있도록 만들어졌다. 열거형은 서로 연관된 상수들의 집합을 의미한다.

상수란 변하지 않는 값을 의미하며 final 키워드를 사용하여 선언할 수 있다.

 

열거형은 여러 상수들을 보다 편리하게 선언하고 관리할 수 있으며, 상수 명의 중복을 피하고, 타입에 대한 안정성을 보장한다. 훨씬 더 간결하고 가독성이 좋은 코드를 작성할 수 있다.

 

열거형 사용

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

enum Seasons { SPRING, SUMMER, FALL, WINTER }

enum Seasons { 
SPRING, //정수값 0 할당
SUMMER,  //정수값 1 할당
FALL, //정수값 2 할당
WINTER //정수값 3 할당
}

public class EnumExample {
    public static void main(String[] args) {
        System.out.println(Seasons.SPRING); // SPRING
    }
}

 

 

상수는 관례적으로 대문자로 작성한다. 각각의 열거 상수들은 객체이기 때문에 Seasons라는 이름의 열거형은 SPRING, SUMMER, FALL, WINTER 총 네 개의 열거 객체를 포함하고 있다고 말할 수 있다.

 

마지막으로 각각의 상수들에는 자동적으로 0부터 시작하는 정수값이 할당되어 각각의 상수를 가리키게 된다.

 

선언된 상수에 접근하는 방법은 열거형이름.상수명 을 통해서 가능

enum Seasons {
SPRING, // 0
SUMMER, // 1
FALL,   // 2
WINTER  // 3
}

public class Main {
    public static void main(String[] args) {
        Seasons seasons = Seasons.SPRING;
        switch (seasons) {
            case SPRING:
                System.out.println("봄");
                break;
            case SUMMER:
                System.out.println("여름");
                break;
            case FALL:
                System.out.println("가을");
                break;
            case WINTER:
                System.out.println("겨울");
                break;
        }
    }
}

/* 출력
봄
*/

 

열거형 메서드

name()

열거 객체가 가지고 있는 문자열을 리턴하며 리턴되는 문자열은 열거 타입을 정의할 때 사용한 상수 이름과 동일하다. String 타입을 리턴한다.

 

ordinal()

열거 객체의 순번(0부터 시작)을 리턴한다. int 타입을 리턴한다.

 

compareTo(비교값)

주어진 매개값과 비교해서 순번 차이를 리턴한다. int 타입을 리턴한다.

 

valueOf(String name)

주어진 문자열의 열거 객체를 리턴한다.

 

values()

모든 열거 객체들을 배열로 리턴한다.

 

열거형 예제

enum Level {
  LOW, // 0
  MEDIUM, // 1
  HIGH // 2
}

public class EnumTest {
    public static void main(String[] args) {
        Level level = Level.MEDIUM;

        Level[] allLevels = Level.values();
        for(Level x : allLevels) {
            System.out.printf("%s=%d%n", x.name(), x.ordinal());
        }

        Level findLevel = Level.valueOf("LOW");
        System.out.println(findLevel);
        System.out.println(Level.LOW == Level.valueOf("LOW"));

        switch(level) {
            case LOW:
                System.out.println("낮은 레벨");
                break;
            case MEDIUM:
                System.out.println("중간 레벨");
                break;
            case HIGH:
                System.out.println("높은 레벨");
                break;
        }
    }
}

/* 출력
LOW=0
MEDIUM=1
HIGH=2
LOW
true
중간 레벨
*/
반응형