Developer/JAVA

JAVA , 열거형 클래스 enum !

단님 2024. 9. 21. 23:30
728x90
enum 의 개념
  1. 열거형(enum) 타입을 정의하는 데 사용되는 특별한 클래스.
  2. 여러 상수들을 하나의 타입으로 정의할 수 있도록 해준다.
  3. 단순히 상수 집합을 표현하는 것이 아닌 클래스 처럼 동작하여
    메서드 또는 필드를 가질 수 있어 더 강력한 기능을 제공한다.

 

[✔️예시01_기본동작]

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

 

Day today = Day.MONDAY;

if (today == Day.MONDAY) {
    System.out.println("오늘은 월요일입니다.");
}

➡️의미를 가진 단어들을 상수로 사용하기 때문에 가독성은 물론 안정적으로 사용할 수 있다.

 

enum 의 특징
  1. 타입의 안전성 
    잘못된 값을 사용할 수 없어 안전성을 보장한다.
  2. 내부적으로 클래스로 취급된다
    생성자, 필드 , 메서드 등을 가질 수 있다.
  3. 메서드 추가 가능하다
    각 상수에 대해 특정 동작을 정의 할 수있다.

 

[✔️예시02_메서드동작]

public enum Season {
    SPRING("봄"), SUMMER("여름"), FALL("가을"), WINTER("겨울");

    private String koreanName;

    Season(String koreanName) {
        this.koreanName = koreanName;
    }

    public String getKoreanName() {
        return koreanName;
    }
}

 

Season season = Season.SPRING;
System.out.println(season.getKoreanName()); // 출력: 봄

 

 

enum 의 주요 메서드

 

[✔️예시03_enum Season]

public enum Season {
    SPRING("봄"), SUMMER("여름"), FALL("가을"), WINTER("겨울");

    private String koreanName;

    Season(String koreanName) {
        this.koreanName = koreanName;
    }

    public String getKoreanName() {
        return koreanName;
    }
}

 

[✔️예시03_method : values ()]

values() : enum 타입에 정의된 모든 상수를 배열로 반환
public class EnumExample {
    public static void main(String[] args) {
        // values() 메서드를 사용하여 모든 enum 값을 출력
        for (Season season : Season.values()) {
            System.out.println(season + " : " + season.getKoreanName());
        }
    }
}

[출력 결과]
SPRING : 봄
SUMMER : 여름
FALL : 가을
WINTER : 겨울

 

[✔️예시03_method : valueOf (String name) ]

valueOf (String name) : String 값을 사용하여 해당하는 enm 상수를 반환하는 방법.(단 , 대소문자 일치 주의)

 

public class EnumExample {
    public static void main(String[] args) {
        // valueOf() 메서드를 사용하여 특정 문자열을 enum 상수로 변환
        Season season = Season.valueOf("SUMMER");
        System.out.println("선택된 계절: " + season + " (" + season.getKoreanName() + ")");
    }
}

[출력 결과]
선택된 계절: SUMMER (여름)

 

[✔️예시03_method : name() ]

name() : 해당 열거형 상수의 이름을 문자열로 반환.

 

public class EnumExample {
    public static void main(String[] args) {
        // name() 메서드를 사용하여 enum 상수의 이름을 가져오기
        Season season = Season.WINTER;
        System.out.println("Enum 상수 이름: " + season.name());
    }
}

[출력 결과]
Enum 상수 이름: WINTER

 

[✔️예시03_method : toString () ]

toString() : name()과 동일하게 상수의 이름을 반환하지만 필요에 따라 재정의가 가능하다.
toString을 재정의 하였다면 다른 결과를 반환할 수 있다.
    // toString() 메서드 재정의
    @Override
    public String toString() {
        return koreanName;
    }

 

public class EnumExample {
    public static void main(String[] args) {
        // toString() 재정의 후 출력
        Season season = Season.SPRING;
        System.out.println("현재 계절: " + season);  // SPRING 대신 "봄"이 출력됩니다.
        
        // 모든 시즌 출력
        for (Season s : Season.values()) {
            System.out.println(s);  // 각각의 상수가 한글 이름으로 출력됩니다.
        }
    }
}

[출력 결과]
현재 계절: 봄
봄
여름
가을
겨울

 

[✔️예시03_method : ordinal() ]

ordinal() : enum 상수가 선언된 순서의 인덱스를 반환 . (첫번째 값이 0부터 시작.)

 

public class EnumExample {
    public static void main(String[] args) {
        // ordinal() 메서드를 사용하여 열거형 상수의 인덱스를 확인
        Season season = Season.FALL;
        System.out.println(season + "의 순서: " + season.ordinal());
    }
}

[출력 결과]
FALL의 순서: 2