dev-lang

Java enum

검은바람 2023. 4. 27. 17:53
반응형

Java Enum이란 무엇인가?

Java Enum은 열거형(enumerated type)을 나타내는 데이터 타입입니다. 여러 개의 상수를 하나의 클래스 내에 정의하고 사용할 수 있도록 도와줍니다. Enum은 Java 5부터 추가되었으며, 이전에는 상수를 정의할 때 static final 변수를 사용했습니다.

Enum을 사용하는 이유

Enum을 사용하면 코드를 더욱 명확하게 만들 수 있습니다. 예를 들어, 만약 요일을 나타내는 상수를 정의하려고 한다면, Enum을 사용하면 다음과 같이 코드를 작성할 수 있습니다.

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

위 코드를 보면, Day라는 Enum 클래스 내에 각 요일을 상수로 정의했습니다. 이제 다른 클래스에서 Day.MONDAY와 같이 요일을 나타내는 변수를 사용할 수 있습니다. 이렇게 Enum을 사용하면, 코드를 읽기 쉽고 이해하기 쉽게 만들어줍니다.

Enum의 구조

Enum은 일반적으로 다음과 같은 구조를 가집니다.

public enum EnumName {
    ENUM_CONSTANT1, ENUM_CONSTANT2, ENUM_CONSTANT3;

    // Fields, Constructors, Methods
}

위 코드에서는 Enum 클래스의 이름을 EnumName으로 정의했습니다. EnumName 내에는 ENUM_CONSTANT1, ENUM_CONSTANT2, ENUM_CONSTANT3와 같은 상수가 정의되어 있습니다. 이 상수들은 대문자로 표기되며, 각 상수는 쉼표로 구분됩니다.

Enum 클래스 내에는 필드, 생성자, 메소드도 정의할 수 있습니다. 이들은 상수들의 값을 보완하거나 Enum 클래스에 추가적인 기능을 제공하는 데 사용됩니다.

Enum의 활용 예시

Enum을 사용하여 다양한 기능을 구현할 수 있습니다. 예를 들어, 색상을 나타내는 Enum을 정의하고, 각 색상에 대한 RGB 값을 계산하는 메소드를 작성할 수 있습니다.

public enum Color {
    RED(255, 0, 0), GREEN(0, 255, 0), BLUE(0, 0, 255);

    private int red;
    private int green;
    private int blue;

    Color(int red, int green, int blue) {
        this.red = red;
        this.green = green;
        this.blue = blue;
    }

    public int getRed() {
        return red;
    }

    public int getGreen() {
        return green;
    }

    public int getBlue() {
        return blue;
    }

    public String toString() {
        return "(" + red + ", " + green + ", " + blue + ")";
    }
}

위 코드에서는 Color라는 Enum 클래스를 정의했습니다. 이 클래스 내에는 RED, GREEN, BLUE와 같은 상수들이 정의되어 있습니다. 각 상수는 RGB 값을 가지고 있으며, 이 값은 Color 클래스의 생성자에서 초기화됩니다. 또한 Color 클래스에는 getRed(), getGreen(), getBlue()와 같은 메소드가 정의되어 있습니다. 이 메소드들은 상수들의 RGB 값을 반환합니다.

Color 클래스를 사용하면 다음과 같이 각 색상에 대한 RGB 값을 출력할 수 있습니다.

System.out.println(Color.RED);    // 출력 결과: (255, 0, 0)
System.out.println(Color.GREEN);  // 출력 결과: (0, 255, 0)
System.out.println(Color.BLUE);   // 출력 결과: (0, 0, 255)

또한 Enum 클래스를 사용하여 switch 문을 작성할 수도 있습니다. 예를 들어, 요일을 나타내는 Enum을 정의하고, 각 요일에 대한 작업을 수행하는 switch 문을 작성할 수 있습니다.

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}

public class Main {
    public static void main(String[] args) {
        Day day = Day.MONDAY;

        switch (day) {
            case MONDAY:
                System.out.println("Today is Monday.");
                break;
            case TUESDAY:
                System.out.println("Today is Tuesday.");
                break;
            case WEDNESDAY:
                System.out.println("Today is Wednesday.");
                break;
            case THURSDAY:
                System.out.println("Today is Thursday.");
                break;
            case FRIDAY:
                System.out.println("Today is Friday.");
                break;
            case SATURDAY:
                System.out.println("Today is Saturday.");
                break;
            case SUNDAY:
                System.out.println("Today is Sunday.");
                break;
            default:
                System.out.println("Invalid day.");
        }
    }
}

위 코드에서는 Day라는 Enum 클래스를 정의하고, switch 문을 사용하여 각 요일에 대한 작업을 수행하고 있습니다.

Enum 클래스를 사용하면 코드를 더욱 간결하고 명확하게 만들어줍니다. 또한 Enum을 사용하여 switch 문을 작성하면, 코드를 더욱 간결하고 가독성이 높게 작성할 수 있습니다.

또한 Enum 클래스를 사용하여 singleton 패턴을 구현할 수도 있습니다. singleton 패턴은 특정 클래스가 오직 하나의 인스턴스만을 가지도록 하는 디자인 패턴입니다. 이 패턴은 여러 스레드에서 공유해야 하는 리소스에 대해 안전한 접근 방식을 제공하며, 전역 객체를 만드는 경우에도 사용됩니다.

Enum 클래스를 사용하여 singleton 패턴을 구현하는 방법은 매우 간단합니다. 아래 코드는 SingletonEnum이라는 Enum 클래스를 정의하고, INSTANCE라는 상수를 선언하여 하나의 인스턴스만을 가지도록 합니다.

public enum SingletonEnum {
    INSTANCE;

    public void doSomething() {
        // do something
    }
}

위 코드에서는 SingletonEnum이라는 Enum 클래스를 정의하고, INSTANCE라는 상수를 선언하였습니다. 이 상수는 하나의 인스턴스만을 가지도록 합니다. 이제 SingletonEnum.INSTANCE를 사용하여 SingletonEnum 클래스의 인스턴스에 접근할 수 있습니다. 또한 SingletonEnum 클래스에는 doSomething() 메소드가 정의되어 있으며, 이 메소드는 SingletonEnum의 인스턴스에서 호출됩니다.

SingletonEnum.INSTANCE.doSomething();

위 코드는 SingletonEnum 클래스의 인스턴스에 접근하여 doSomething() 메소드를 호출하는 예시입니다. 이 방법을 사용하면 singleton 패턴을 매우 쉽게 구현할 수 있습니다.

이처럼 Enum 클래스는 상수, switch 문, singleton 패턴 등 다양한 용도로 사용될 수 있습니다. Enum 클래스를 사용하면 코드의 가독성을 높이고, 유지보수를 쉽게 할 수 있으며, 프로그램의 안정성을 높일 수 있습니다. 따라서 Enum 클래스를 잘 활용하여 프로그램을 개발하는 것이 좋습니다.

또한 Enum 클래스는 인터페이스를 구현할 수 있습니다. 이를 통해 Enum 클래스를 사용하여 인터페이스를 구현하면, 상수와 메소드를 함께 사용할 수 있습니다. 예를 들어, 아래 코드는 Operation이라는 인터페이스를 정의하고, 각각의 상수에 대한 메소드를 구현한 Enum 클래스인 BasicOperation을 정의합니다.

public interface Operation {
    double apply(double x, double y);
}

public enum BasicOperation implements Operation {
    PLUS("+") {
        public double apply(double x, double y) {
            return x + y;
        }
    },
    MINUS("-") {
        public double apply(double x, double y) {
            return x - y;
        }
    },
    TIMES("*") {
        public double apply(double x, double y) {
            return x * y;
        }
    },
    DIVIDE("/") {
        public double apply(double x, double y) {
            return x / y;
        }
    };

    private final String symbol;

    BasicOperation(String symbol) {
        this.symbol = symbol;
    }

    @Override
    public String toString() {
        return symbol;
    }
}

위 코드에서는 Operation이라는 인터페이스를 정의하고, BasicOperation이라는 Enum 클래스를 정의합니다. BasicOperation은 Operation 인터페이스를 구현하며, PLUS, MINUS, TIMES, DIVIDE 네 개의 상수를 가집니다. 각각의 상수에 대해서는 apply() 메소드가 정의되어 있습니다.

이제 BasicOperation을 사용하여 계산을 수행할 수 있습니다. 예를 들어, 아래 코드는 PLUS 상수의 apply() 메소드를 호출하여 1과 2를 더한 결과를 출력합니다.

double result = BasicOperation.PLUS.apply(1, 2);
System.out.println(result);  // 출력 결과: 3.0

위 코드에서는 BasicOperation 클래스의 PLUS 상수에 대한 apply() 메소드를 호출하여 1과 2를 더한 결과를 출력합니다. 이처럼 Enum 클래스를 사용하여 인터페이스를 구현하면, 각 상수에 대한 메소드를 정의할 수 있으며, 이를 통해 다양한 용도로 사용할 수 있습니다.

Java Enum 클래스는 다양한 용도로 사용될 수 있는 매우 유용한 클래스입니다. 이를 잘 활용하여 코드를 작성하면, 가독성이 높고 유지보수가 쉬운 코드를 작성할 수 있습니다. 또한 Enum 클래스를 사용하여 프로그램의 안정성을 높일 수 있습니다. 따라서 Java Enum 클래스를 잘 활용하여 프로그래밍을 하면 좋습니다.

반응형