Java Study

Java Enum 정리

초코너무조코 2025. 1. 22. 18:53
728x90

목차

    Enum 이란?

    Java에서 enum은 상수 값을 정의하는 데 사용되는 특별한 데이터 타입입니다. enum을 사용하면 코드를 보다 깔끔하고, 가독성이 좋으며, 유지보수도 용이하게 할 수 있습니다. 이번 글에서는 enum의 기본 사용법부터 다양한 활용법까지 설명하고, 실용적인 예시도 함께 제공하겠습니다.

    1. Enum 기본 사용법

    Java에서 enum을 선언하는 방법은 다음과 같습니다.

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

    위의 예시는 일주일의 요일을 enum으로 정의한 예시입니다. enum은 일반적으로 대문자로 작성하며, 각 항목은 콤마로 구분됩니다.

    2. Enum을 변수로 사용하기

    enum은 switch문이나 조건문에서 유용하게 사용될 수 있습니다. 예를 들어, 요일을 변수로 받아 특정 작업을 수행하는 방법을 아래와 같이 작성할 수 있습니다.

    public class EnumExample {
        public enum Day {
            SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
        }
    
        public static void printDay(Day day) {
            switch (day) {
                case MONDAY:
                    System.out.println("It's Monday!");
                    break;
                case FRIDAY:
                    System.out.println("It's Friday!");
                    break;
                case SUNDAY:
                    System.out.println("It's Sunday!");
                    break;
                default:
                    System.out.println("Just another day.");
                    break;
            }
        }
    
        public static void main(String[] args) {
            printDay(Day.MONDAY);
            printDay(Day.SUNDAY);
        }
    }
    

    출력:

    It's Monday!
    It's Sunday!
    

    3. Enum에 필드 추가하기

    enum은 단순히 상수 값만 저장하는 것이 아니라, 필드와 메소드도 포함할 수 있습니다. 예를 들어, 각 요일에 대해 번호를 부여하고 싶다면, 필드를 추가하여 다음과 같이 구현할 수 있습니다.

    public enum Day {
        SUNDAY(1), MONDAY(2), TUESDAY(3), WEDNESDAY(4), THURSDAY(5), FRIDAY(6), SATURDAY(7);
    
        private final int dayNumber;
    
        Day(int dayNumber) {
            this.dayNumber = dayNumber;
        }
    
        public int getDayNumber() {
            return dayNumber;
        }
    }
    
    public class EnumWithFieldsExample {
        public static void main(String[] args) {
            for (Day day : Day.values()) {
                System.out.println(day + " is day number " + day.getDayNumber());
            }
        }
    }
    

    출력:

    SUNDAY is day number 1
    MONDAY is day number 2
    TUESDAY is day number 3
    WEDNESDAY is day number 4
    THURSDAY is day number 5
    FRIDAY is day number 6
    SATURDAY is day number 7
    

    4. Enum에 메소드 추가하기

    enum에 메소드를 추가하여 각 상수에 대해 다양한 로직을 적용할 수도 있습니다. 예를 들어, 요일에 따른 활동을 출력하는 메소드를 추가할 수 있습니다.

    public enum Day {
        SUNDAY {
            @Override
            public void activity() {
                System.out.println("Relax, it's Sunday!");
            }
        },
        MONDAY {
            @Override
            public void activity() {
                System.out.println("Start working, it's Monday.");
            }
        },
        TUESDAY {
            @Override
            public void activity() {
                System.out.println("Work hard, it's Tuesday.");
            }
        },
        // 나머지 요일도 정의 가능
        ;
    
        public abstract void activity();
    }
    
    public class EnumWithMethodsExample {
        public static void main(String[] args) {
            Day.MONDAY.activity();
            Day.SUNDAY.activity();
        }
    }
    

    출력:

    Start working, it's Monday.
    Relax, it's Sunday!
    

    5. Enum 활용 예시

    5.1. 상태 관리

    enum을 상태 관리에 활용할 수 있습니다. 예를 들어, 주문의 상태를 관리할 때 enum을 사용하면 코드가 더욱 직관적이고 관리하기 쉬워집니다.

    public enum OrderStatus {
        PENDING, SHIPPED, DELIVERED, CANCELLED;
    }
    
    public class Order {
        private OrderStatus status;
    
        public Order(OrderStatus status) {
            this.status = status;
        }
    
        public void printOrderStatus() {
            System.out.println("Order Status: " + status);
        }
    
        public static void main(String[] args) {
            Order order = new Order(OrderStatus.SHIPPED);
            order.printOrderStatus();
        }
    }
    

    출력:

    Order Status: SHIPPED
    

    6. Enum의 장점

    1. 타입 안전성: enum을 사용하면 값이 제한되므로, 잘못된 값이 들어갈 가능성을 줄일 수 있습니다.
    2. 상수 관리 용이: 여러 상수 값을 한 곳에서 관리할 수 있어 코드가 깔끔하고, 유지보수가 용이합니다.
    3. 가독성: enum은 값의 의미를 쉽게 알 수 있도록 해줍니다.

    Java Enum 메소드 정리

    Java에서 enum은 상수 값들의 집합을 정의하는 타입으로, 다양한 내장 메소드들을 제공합니다. 이 메소드들은 enum을 다루기 쉽고 효율적으로 만들어 주며, 오늘은 그 중에서 가장 자주 사용되는 valueOf(), values(), name(), ordinal()에 대해 알아보겠습니다.

    1. valueOf()

    valueOf() 메소드는 주어진 이름과 일치하는 enum 항목을 반환합니다. 문자열로 enum 값을 찾고자 할 때 사용됩니다.

    예시

    public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
    }
    
    public class EnumValueOfExample {
        public static void main(String[] args) {
            // 문자열을 enum 값으로 변환
            Day day = Day.valueOf("MONDAY");
            System.out.println("Enum value: " + day);
        }
    }
    

    출력:

    Enum value: MONDAY
    

    valueOf()는 해당 이름의 항목이 존재하지 않으면 IllegalArgumentException을 발생시킵니다.

    2. values()

    values() 메소드는 enum 타입의 모든 값을 배열 형태로 반환합니다. enum에 정의된 모든 항목을 순회하고자 할 때 유용합니다.

    예시:

    public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
    }
    
    public class EnumValuesExample {
        public static void main(String[] args) {
            // 모든 enum 값 출력
            for (Day day : Day.values()) {
                System.out.println(day);
            }
        }
    }
    

    출력:

    SUNDAY
    MONDAY
    TUESDAY
    WEDNESDAY
    THURSDAY
    FRIDAY
    SATURDAY
    

    values()는 enum 항목들을 순차적으로 반환하는 배열을 제공합니다. 이 메소드는 항상 자동으로 생성되므로 개발자가 따로 작성할 필요는 없습니다.

    3. name()

    name() 메소드는 enum 항목의 이름을 문자열로 반환합니다. 이는 enum 값의 이름을 출력하거나 비교할 때 유용합니다.

    예시:

    public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
    }
    
    public class EnumNameExample {
        public static void main(String[] args) {
            Day day = Day.MONDAY;
            System.out.println("Enum name: " + day.name());
        }
    }
    

    출력:

    Enum name: MONDAY
    

    name() 메소드는 enum 항목의 선언된 이름을 그대로 반환합니다. 이 메소드는 모든 enum 항목에 자동으로 생성됩니다.

    4. ordinal()

    ordinal() 메소드는 enum 항목의 순서를 반환합니다. enum 항목이 정의된 순서대로 인덱스를 0부터 부여하고, 이를 반환합니다.

    예시:

    public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
    }
    
    public class EnumOrdinalExample {
        public static void main(String[] args) {
            Day day = Day.WEDNESDAY;
            System.out.println("Ordinal value: " + day.ordinal());
        }
    }
    

    출력:

    Ordinal value: 3
    

    ordinal() 메소드는 enum 항목의 순서값을 반환합니다. 예를 들어, SUNDAY는 0, MONDAY는 1, WEDNESDAY는 3입니다.

    5. compareTo()

    compareTo() 메소드는 두 enum 항목의 순서를 비교합니다. ordinal() 값에 기반해 비교하는 방식으로, compareTo()는 Comparable 인터페이스를 구현한 enum 클래스에서 제공됩니다.

    예시:

    public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
    }
    
    public class EnumCompareToExample {
        public static void main(String[] args) {
            Day day1 = Day.MONDAY;
            Day day2 = Day.WEDNESDAY;
    
            // 순서 비교
            System.out.println(day1.compareTo(day2)); // -2
        }
    }
    

    출력:

    -2
    

    compareTo() 메소드는 두 enum 항목의 순서를 비교하여, 첫 번째 항목이 두 번째 항목보다 앞에 있으면 음수, 뒤에 있으면 양수를 반환합니다. 동일한 경우 0을 반환합니다.

    6. valueOf()와 name() 차이점

    • valueOf()는 문자열로 enum 값을 찾을 때 사용하고, 해당 이름의 값이 없으면 예외가 발생합니다.
    • name()은 이미 enum 객체에 대한 메소드로 해당 객체의 이름을 문자열로 반환합니다.

    예시:

    public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
    }
    
    public class EnumNameAndValueOfExample {
        public static void main(String[] args) {
            Day day1 = Day.MONDAY;
            Day day2 = Day.valueOf("MONDAY");
    
            System.out.println("Using name(): " + day1.name()); // MONDAY
            System.out.println("Using valueOf(): " + day2); // MONDAY
        }
    }
    

    출력:

    Using name(): MONDAY
    Using valueOf(): MONDAY
    

    결론

    Java의 enum은 다양한 내장 메소드들을 제공하여, 상수 집합을 관리하고 조작하는 데 매우 유용합니다. valueOf(), values(), name(), ordinal()과 같은 메소드를 적절히 활용하면 코드를 더 간결하고 효율적으로 작성할 수 있습니다. 각 메소드의 특성을 잘 이해하고 필요에 맞게 활용해 보세요.

     


    이 포스트에서는 enum의 기본적인 사용법부터 필드 추가, 메소드 사용법까지 다양하게 다뤄보았습니다. 이를 바탕으로 다양한 Java 프로젝트에서 enum을 적극적으로 활용해 보세요!

     

     

    728x90