Post

열거형

열거형이란

JDK 1.5부터 추가된 서로 관련된 상수를 편리하게 선언하기 위한 클래스

before

1
2
3
4
5
6
7
8
9
10
11
12
13
class Card {
    static final int CLOVER = 0;
    static final int HEART = 1;
    static final int DIAMOND = 2;
    static final int SPADE = 3;
    
    static final int TWO = 0;
    static final int THREE = 1;
    static final int FOUR = 2;

    final int kind;
    final int num;
}

after

1
2
3
4
5
6
7
class Card {
    enum Kind { CLOVER, HEART, DIAMOND, SPADE }
    enum Value { TWO, THREE, FOUR }

    final Kind kind;
    final Value value;
}

사용법

정의

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

사용

1
2
3
4
5
6
7
8
9
10
enum Direction { EAST, SOUTH, WEST, NORTH }

class Unit {
    int x, y;
    Direction dir;

    void init() {
        dir = Direction.EAST;
    }
}

열거형 상수간의 비교에 ==을 사용할 수 있지만 >, < 같은 비교연산자는 사용이 불가능하다. 비교는 compareTo 메서드를 사용해야 한다.

사용 가능한 함수

메서드설명호출 주체?
static E[] values()열거형의 모든 상수를 배열에 담아 반환열거형
static E valueOf(String name)name과 일치하는 열거형 상수 인스턴스를 반환열거형
String name()열거형 상수의 이름을 문자열로 반환변수
int ordinal()열거형 상수가 정의된 순서를 반환 (0부터 시작)변수

열거형에 멤버 추가

열거형 상수의 값은 기본적으로 0부터 시작된다.

원하는 상수의 값을 지정하려면 다음과 같이 열거형을 정의해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
enum Direction {
    EAST(11), SOUTH(12), WEST(13), NORTH(14);

    private final int value;  // 값을 저장할 필드

    Direction(int value) {  // 생성자. private 생성자라 new 키워드 사용불가
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

열거형 상수를 모두 정의한 다음에 필드, 생성자, 메서드 같은 구문을 작성해야 한다.

상수의 값은 하나가 아니라 여러개가 될 수도 있으며 필드와 메서드를 추가하고 생성자를 수정하면 된다.

또한, 추상메서드를 정의할 수도 있으며 추상메서드가 정의되어 있다면 상수를 정의할 때 추상메서드를 구현해야 한다.

This post is licensed under CC BY 4.0 by the author.