열거형(Enum) 사용하기

  • 6 minutes to read

하나의 이름으로 서로 관련 있는 항목들을 묶어 관리할 수 있는 열거형(Enum, Enumeration) 에 대해 학습하겠습니다.

// 열거형(Enumeration): 하나의 이름으로 서로 관련 있는 상수 집합을 정의

열거형(Enum) 사용하기

Java에서 열거형(Enumeration) 형식은 여러 개의 상수를 하나의 이름으로 묶어 관리하는 데이터 형식입니다. 줄여서 열거형이라고 하며, enum 키워드를 사용하여 선언합니다.

열거형을 활용하면 관련된 값들을 보다 직관적으로 표현할 수 있어 코드의 가독성과 유지보수성이 향상됩니다. 또한, 이미 Java에서 제공하는 열거형을 자주 활용하지만, 직접 열거형을 정의하는 경우도 많습니다.


ConsoleColor와 유사한 열거형 만들기

C#에서는 ConsoleColor 열거형을 사용하여 콘솔의 글자색과 배경색을 변경할 수 있습니다.
Java에서는 기본적으로 콘솔의 색상을 변경하는 API를 제공하지 않지만, ANSI 이스케이프 코드를 사용하면 색상을 변경할 수 있습니다. 이를 위해 ConsoleColor 열거형을 직접 만들어 보겠습니다.

ConsoleColor 열거형 사용하기

코드: ConsoleColorDemo.java

// ConsoleColor 열거형을 활용하여 콘솔 텍스트 색상 변경하기
enum ConsoleColor {
    RESET("\033[0m"),
    RED("\033[31m"),
    GREEN("\033[32m"),
    BLUE("\033[34m"),
    YELLOW("\033[33m");

    private final String code;

    ConsoleColor(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }
}

public class ConsoleColorDemo {
    public static void main(String[] args) {
        System.out.println(ConsoleColor.BLUE.getCode() + "Blue" + ConsoleColor.RESET.getCode());
        System.out.println(ConsoleColor.RED.getCode() + "Red" + ConsoleColor.RESET.getCode());
    }
}

실행 결과:

Blue (파란색)
Red (빨간색)

ConsoleColor 열거형을 사용하여 콘솔 출력 색상을 변경할 수 있습니다. getCode() 메서드를 통해 ANSI 코드 값을 가져와 사용할 수 있습니다.


사용자 정의 열거형 만들기

이미 만들어 있는 열거형이 아닌 우리가 원하는 열거형을 직접 정의할 수 있습니다. 이를 사용자 정의 열거형이라고 부릅니다.

사용자 정의 열거형 기본 구조

enum EnumName {
    CONSTANT1,
    CONSTANT2,
    CONSTANT3
}

기본적인 열거형 만들기

코드: EnumerationDemo.java

// 우선순위를 나타내는 Priority 열거형 생성
enum Priority {
    HIGH,
    NORMAL,
    LOW
}

public class EnumerationDemo {
    public static void main(String[] args) {
        Priority high = Priority.HIGH;
        Priority normal = Priority.NORMAL;
        Priority low = Priority.LOW;

        System.out.println(high + ", " + normal + ", " + low);
    }
}

실행 결과:

HIGH, NORMAL, LOW

열거형 항목에 상수 값 부여하기

기본적으로 열거형의 각 항목은 0부터 시작하는 정수 값을 가지지만, 직접 값을 설정할 수도 있습니다.

열거형에 정수 값 부여하기

enum Align {
    TOP(0),
    BOTTOM(2),
    LEFT(4),
    RIGHT(8);

    private final int value;

    Align(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

public class EnumWithValues {
    public static void main(String[] args) {
        System.out.println(Align.TOP + " : " + Align.TOP.getValue());
        System.out.println(Align.BOTTOM + " : " + Align.BOTTOM.getValue());
    }
}

실행 결과:

TOP : 0
BOTTOM : 2

열거형을 사용한 비교 및 switch 문 활용하기

열거형 값을 비교할 때는 switch 문을 사용하면 더욱 직관적이고 깔끔한 코드를 작성할 수 있습니다.

코드: EnumSwitch.java

enum Animal {
    CHICKEN,
    DOG,
    PIG
}

public class EnumSwitch {
    public static void main(String[] args) {
        Animal animal = Animal.DOG;

        switch (animal) {
            case CHICKEN:
                System.out.println("닭");
                break;
            case DOG:
                System.out.println("개");
                break;
            case PIG:
                System.out.println("돼지");
                break;
            default:
                System.out.println("기본값 설정 영역");
                break;
        }
    }
}

실행 결과:


열거형을 문자열 또는 정수 값으로 변환하기

열거형 값을 문자열과 정수 값으로 변환하기

코드: EnumToString.java

enum Animal {
    RABBIT, DRAGON, SNAKE
}

public class EnumToString {
    public static void main(String[] args) {
        Animal animal = Animal.DRAGON;
        int index = animal.ordinal(); // 1
        String name = animal.name(); // "DRAGON"

        System.out.println("Animal.DRAGON : " + index + ", " + name);
    }
}

실행 결과:

Animal.DRAGON : 1, DRAGON

ordinal() 메서드는 열거형의 순서를 정수 값으로 반환하며, name() 메서드는 열거형의 이름을 문자열로 반환합니다.


열거형을 byte 형식으로 사용하기

기본적으로 열거형의 자료형은 int이지만, 특정 요구 사항이 있을 때 byte 같은 다른 정수형 값을 활용할 수 있습니다.

코드: ByteEnumExample.java

enum Status {
    INACTIVE((byte) 0),
    ACTIVE((byte) 1),
    PENDING((byte) 2);

    private final byte code;

    Status(byte code) {
        this.code = code;
    }

    public byte getCode() {
        return code;
    }
}

public class ByteEnumExample {
    public static void main(String[] args) {
        Status currentStatus = Status.ACTIVE;
        System.out.println("현재 상태: " + currentStatus + "(" + currentStatus.getCode() + ")");

        currentStatus = Status.PENDING;
        System.out.println("현재 상태: " + currentStatus + "(" + currentStatus.getCode() + ")");
    }
}

실행 결과:

현재 상태: ACTIVE(1)
현재 상태: PENDING(2)

Enum 클래스 활용하기

모든 열거형 항목을 리스트로 가져오기

public class EnumGetNames {
    public static void main(String[] args) {
        for (ConsoleColor color : ConsoleColor.values()) {
            System.out.println(color);
        }
    }
}

문자열을 열거형으로 변환하기

public class EnumParse {
    public static void main(String[] args) {
        String colorName = "RED";
        ConsoleColor color = ConsoleColor.valueOf(colorName);
        System.out.println(color);
    }
}

장 요약

열거형을 사용하면 관련된 값들을 직관적으로 표현하고 관리할 수 있습니다. 또한 switch 문과 함께 사용하면 코드가 간결해지며 유지보수성이 향상됩니다. Java의 Enum 클래스 및 ordinal() 메서드를 활용하면 열거형 값을 더욱 효과적으로 다룰 수 있습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com