BE/Java

[Java] enum

baek-dev 2025. 1. 1. 18:24

열거형, 서로 관련된 상수들의 집합을 정의할 때 사용하는 데이터타입

값이 고정된 상수 집합을 다룰 때 가독성을 높이고 오류를 줄이는데 유용


1. enum의 기본 구조

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
  • enum은 클래스처럼 보이지만, 고정된 상수 값을 가지는 특별한 데이터 타입이다
  • 각 상수는 대문자로 작성하는것이 관례
  • enum값은 기본적으로 0부터 시작하는 정수 값(ordinal)으로 관리된다

2. enum 사용방법

1) 기본사용

public class Main {
    public static void main(String[] args) {
        Day today = Day.MONDAY;
        System.out.println(today); // MONDAY
    }
}

 

2) switch 문과 함께 사용

switch문에서 enum은 간결하고 가독성 높게 사용할 수 있다

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

        switch (today) {
            case MONDAY:
                System.out.println("It's Monday!");
                break;
            case FRIDAY:
                System.out.println("It's Friday!");
                break;
            default:
                System.out.println("Another day...");
        }
    }
}

3. enum의 메서드

enum 은 기본적으로 다음 메서드를 제공한다

  • values() : 열거형의 모든 상수를 배열로 반환
  • ordinal() : 상수의 순서를 반환(0부터 시작)
  • name() : 상수 이름을 문자열로 반환
for (Day day : Day.values()) {
    System.out.println(day.name() + " is at index " + day.ordinal());
}
MONDAY is at index 0
TUESDAY is at index 1
...
SUNDAY is at index 6

4. enum의 커스텀 필드와 메서드

enum은 일반 클래스처럼 필드와 메서드를 가질 수 있다

public enum Day {
    MONDAY("Weekday"), 
    SATURDAY("Weekend"), 
    SUNDAY("Weekend");

    private final String type; // 커스텀 필드

    // 생성자
    Day(String type) {
        this.type = type;
    }

    // 필드 값을 반환하는 메서드
    public String getType() {
        return type;
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println(Day.MONDAY.getType()); // Weekday
    }
}

5. enum을 활용한 고급 기능

1) 인터페이스 구현

enum도 인터페이스를 구현할 수 있다

public interface Greeting {
    void sayHello();
}

public enum Language implements Greeting {
    ENGLISH {
        @Override
        public void sayHello() {
            System.out.println("Hello");
        }
    },
    SPANISH {
        @Override
        public void sayHello() {
            System.out.println("Hola");
        }
    };
}

 

2) 추상 메서드 정의

enum 내부에 추상 메서드를 정의하면, 각 상수에서 해당 메서드를 구현해야 한다

public enum Operation {
    ADD {
        @Override
        public int apply(int x, int y) {
            return x + y;
        }
    },
    MULTIPLY {
        @Override
        public int apply(int x, int y) {
            return x * y;
        }
    };

    public abstract int apply(int x, int y);
}

6. enum의 특징

1. 불변 객체 : 모든 enum 상수는 변경할 수 없는 객체

2. 싱글톤 패턴 : 각 상수는 JVM 내에서 하나의 인스턴스만 존재

3. final 클래스 : enum은 암묵적으로 final로 선언되므로 상속할 수 없음


7. enum의 장점

  • 코드 가족성 향상 : 명시적인 상수 집합으로 코드 이해가 쉽다
  • 타입 안정성 : 잘못된 값을 방지하며, 컴파일 타임에 오류를 잡아낼 수 있다
  • 유지보수 용이 : 상수 값을 추가하거나 수정하기 편리하다

8. enum과 관련된 주요 메서드

  • compareTo() : 열거형 상수 간의 순서를 비교
  • toString() : 상수의 이름을 문자열로 반환
  • valueOf(String name) : 문자열을 열거형 상수로 변환

 

 

 

 

출처 : ChatGPT

'BE > Java' 카테고리의 다른 글

[JPA] N + 1 문제  (0) 2025.01.06
[Java] Generic 제너릭  (0) 2025.01.04
[Java] @IdClass  (0) 2024.12.31
[Java] @Builder, @ToString, @EqualsAndHashCode, @Singular  (0) 2024.12.23
[Java] 프록시  (0) 2024.12.22