본문 바로가기
[JAVA]/JAVA 기본

[JAVA] 열거형

by 황원용 2022. 9. 13.
728x90

열거형(Enum)

 서로 연관된 상수들의 집합을 의미한다. 여러 상수를 정의하는 기존의 방식은 상수명 중복이라는 문제가 발생한다. 정수 값을 상수에 할당할 때, 같은 정수 값을 할당하게 되면 상수의 이름이 중복이 되어 컴파일 에러가 발생한다.

 

public static final int A = 1;
public static final int B = 1; // 상수명 간의 중복
 인터페이스를 사용하여 상수를 구분하는 방법으로 해결할 수 있지만, 타입 안정성이라는 새로운 문제가 발생한다.
interface i {
	int A = 1
}

interface j {
	int B = 1
}

if (i.A == j.B){...} 
// 의미적으로 전혀 다른 값이지만, 코드에 문제가 없어 에러가 발생하지 않는다. (타입 안정성이 떨어짐)

열거형 예시

enum Alphabet {A, B, C, D, E} //열거형으로 선언함으로써 상수명의 중복을 피할 수 있음
enum Grade {A, B, C, D, F}
public class Main {
    public static void main(String[] args) {
        Grade grade = Grade.A; // 열거형이름.상수명을 통해 접근 가능함
        switch (grade) {
            case A:
                System.out.println("A입니다.");
                break;
            case B:
                System.out.println("B입니다.");
                break;
            case C:
                System.out.println("C입니다.");
                break;
            case D:
                System.out.println("D입니다.");
                break;
            case F:
                System.out.println("F입니다.");
                break;
        }
    }
}

//출력값 : A입니다.
 여러 상수들을 간단하게 선언하고 관리할 수 있으며, 상수명의 중복을 피하고, 타입 안전성을 보장한다. 또한, 가독성을 높이고 switch 문에서도 작동이 가능하다.
※ switch 문은 char, byte, short, int, Character, Byte, Short, Integer, String, enum 타입만 가능하다.
(사용자 정의 타입은 안 됨)

 

열거형의 사용

public class Main {
    public static void main(String[] args) {
        Size size = Size.MEDIUM;

        Size[] allSize = Size.values(); // 열거형 기본 메서드로, 모든 열거 객체들을 배열로 리턴
        for (Size i : allSize) {
            System.out.printf("%s=%d%n", i.name(), i.ordinal()); // 열거형 기본 메서드 name(), ordinal()
        }

        Size switchSize = Size.valueOf("LARGE"); // 열거형 기본 메서드 valueOf()
        System.out.println(switchSize);
        System.out.println(Size.LARGE == Size.valueOf("LARGE"));

        switch (size) {
            case SMALL:
                System.out.println("스몰");
                break;
            case MEDIUM:
                System.out.println("미디엄");
                break;
            case LARGE:
                System.out.println("라지");
                break;
        }
    }
}


enum Size {
    SMALL, // 0, 열거된 상수는 따로 값을 지정해주지 않아도 자동으로 0부터 시작하는 정수값을 할당받는다.
    MEDIUM, // 1
    LARGE // 2
}

// 출력값
SMALL=0
MEDIUM=1
LARGE=2
LARGE
true
미디엄
리턴 타입 메소드(매개변수) 설명
String name()  열거 객체가 가지고 있는 문자열을 리턴하며, 리턴되는 문자열은 열거 타입을 정의할 때 사용한 상수 이름과 동일하다.
int ordinal()  열거 객체의 순번(0부터)을 리턴한다.
int compareTo(비교값)  주어진 매개값과 비교해서 순번의 차이를 리턴한다.
열거 타입 valueOf(String name)  주어진 문자열의 열거 객체를 리턴한다.
열거 타입 values()  모든 열거 객체들을 배열로 리턴한다.
728x90

'[JAVA] > JAVA 기본' 카테고리의 다른 글

[JAVA] 예외 처리 정리  (0) 2022.09.14
[JAVA] 제네릭 & 와일드 카드  (0) 2022.09.14
[JAVA] 래퍼 클래스(Wrapper Class)  (0) 2022.09.13
[JAVA] 형변환 총정리  (0) 2022.09.12
[JAVA] 추상화와 인터페이스  (1) 2022.09.08