Java

[Java] 열거형 Enum

codi-3 2024. 8. 16. 00:55

열거형(enum)은 Java에서 고정된 상수 집합을 정의할 때 사용하는 특수한 데이터 타입이다. 주로 관련된 상수들을 그룹화하여 의미 있는 이름으로 관리하고, 이러한 상수들이 제한된 값들 중 하나임을 보장하기 위해 사용된다. 또한 코드의 가독성과 안전성을 높일 수 있다.

 

🔡 열거형(enum)의 기본구조

  • enum 키워드를 사용하여 정의한다.
  • 열거형 내부에는 상수 값들이 정의되며, 이 값들은 자동으로 정수로 매핑된다(0부터 시작).
  • 하지만 실제로는 객체로 취급되므로 다양한 메서드와 필드를 가질 수 있다
  • 열거형 내에서 여러 생성자를 정의할 수 있다
  • 열거형의 생성자는 오버로딩(매개변수의 타입이나 수를 다르게 하는 방식으로 동일한 이름의 생성자여러 개 정의하는 것)이 가능하다.
public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

위 예제에서 Day라는 열거형(enum)을 정의했으며, 이는 일주일의 요일을 나타낸다. 열거형 내의 각 값(SUNDAY, MONDAY,...)은 Day 타입의 상수이다.

 


🏗️열거형(enum) 생성자 오버로딩 예시

public enum CoffeeSize {
    SMALL(100),        // 생성자 호출: CoffeeSize(int ml)
    MEDIUM(200),       // 생성자 호출: CoffeeSize(int ml)
    LARGE(300, true);  // 생성자 호출: CoffeeSize(int ml, boolean hasExtraShot)

    private final int ml;
    private final boolean hasExtraShot;

    // 기본 생성자: hasExtraShot은 false로 설정
    CoffeeSize(int ml) {
        this.ml = ml;
        this.hasExtraShot = false;
    }

    // 오버로딩된 생성자: hasExtraShot을 지정할 수 있음
    CoffeeSize(int ml, boolean hasExtraShot) {
        this.ml = ml;
        this.hasExtraShot = hasExtraShot;
    }

    public int getMl() {
        return ml;
    }

    public boolean hasExtraShot() {
        return hasExtraShot;
    }
}

public class Main {
    public static void main(String[] args) {
        CoffeeSize size = CoffeeSize.LARGE;
        System.out.println("Selected size: " + size);
        System.out.println("Volume: " + size.getMl() + "ml");
        System.out.println("Has extra shot: " + size.hasExtraShot());
    }
}

 

  • 생성자 오버로딩:
    • CoffeeSize 열거형에는 두 개의 생성자가 정의되어 있다.
    • 하나는 int 매개변수만 받으며, 다른 하나는 int와 boolean 매개변수를 받습는다.
    • SMALL과 MEDIUM은 첫 번째 생성자를 사용하고, LARGE는 두 번째 생성자를 사용하여 hasExtraShot 필드를 true로 초기화합니다.
  • 열거형 상수의 초기화:
    • 열거형 상수 LARGE는 300ml와 true 값을 사용해 초기화됩니다

 


⚒️열거형(enum)의 메서드와 필드

public enum Day {
    SUNDAY("Weekend"), MONDAY("Weekday"), TUESDAY("Weekday"), WEDNESDAY("Weekday"),
    THURSDAY("Weekday"), FRIDAY("Weekday"), SATURDAY("Weekend");

    private String type;

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

    public String getType() {
        return type;
    }
}

public class EnumExample {
    public static void main(String[] args) {
        // values를 사용한 for-loop 출력문
        for (Day day : Day.values()) {
            System.out.println(day + " is a " + day.getType());
        }

        // valueOf 를 사용하여 특정일 계산
        String dayName = "WEDNESDAY";
        Day day = Day.valueOf(dayName);
        System.out.println(dayName + " is a " + day.getType());
    }
}

//출력값
SUNDAY is a Weekend
MONDAY is a Weekday
TUESDAY is a Weekday
WEDNESDAY is a Weekday
THURSDAY is a Weekday
FRIDAY is a Weekday
SATURDAY is a Weekend
WEDNESDAY is a Weekday

 

 

  • values(): 열거형의 모든 상수 값을 배열로 반환한다.
  • valueOf(String name): 열거형 상수의 이름으로 해당 상수를 반환한다.

 


 

✏️열거형(enum) 활용 예제

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

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

        switch (today) {
            case MONDAY:
                System.out.println("Start of the work week.");
                break;
            case FRIDAY:
                System.out.println("End of the work week.");
                break;
            case SATURDAY: case SUNDAY:
                System.out.println("It's the weekend!");
                break;
            default:
                System.out.println("Midweek day.");
                break;
        }
    }
}

 

위 예제에서는 Day 열거형을 사용하여 현재 요일에 따라 메시지를 출력한다. 열거형은 인터페이스와 같이 Java의 객체 지향성을 활용할 수 있는 중요한 방법 중 하나이다. 앞으로 더 활용할 수 있게 연습을 하면 좋을 거 같다.

'Java' 카테고리의 다른 글

[Java]인터페이스  (0) 2024.08.12
[Java]모던자바 Stream  (0) 2024.08.09
[Java]실행시간 계산법  (0) 2024.08.05
[Java]비교방법 equals()와 ==의 차이  (0) 2024.08.02
[Java]HashMap 사용법  (0) 2024.07.31