챗 지피티의 힘을 빌려 정리 해둠.

정리하면 Final 상수 자동처리 + static 자동처리로 추후 값을 비교할때 유리함 + switch문에 숫자대신 쓸수있음 

✅ 자바 enum의 주요 특징

1. 타입 안정성 제공

  • enum은 컴파일 타임에 값 검증을 해줘서 잘못된 값이 들어가는 걸 방지해.
public enum Grade { BRONZE, SILVER, GOLD }

Grade g = Grade.GOLD;        // ✅ OK
Grade g2 = Grade.valueOf("VIP"); // ❌ 런타임 예외

✔️ String처럼 오타로 인한 오류를 컴파일 시점에서 방지할 수 있음.


2. 내부적으로 클래스이며, 싱글턴 인스턴스를 갖는다

  • enum은 내부적으로 final static 객체를 각각 하나씩 만들어 두는 클래스야.
  • 즉, Grade.GOLD == Grade.GOLD는 항상 true (같은 인스턴스)
Grade g1 = Grade.GOLD;
Grade g2 = Grade.GOLD;
System.out.println(g1 == g2); // ✅ true

3. switch 문에서 사용할 수 있다

switch (grade) {
    case BRONZE: ...
    case GOLD: ...
}

✔️ 정수 값 없이도 switch-case 처리 가능


4. 필드와 메서드를 가질 수 있다

public enum Grade {
    BRONZE(5), SILVER(10), GOLD(15);

    private final int discount;

    Grade(int discount) {
        this.discount = discount;
    }

    public int getDiscount() {
        return discount;
    }
}

✔️ 각 enum 상수에 **값과 동작(메서드)**을 연결할 수 있음.


5. 메서드 오버라이딩 가능 (상수별 동작 지정 가능)

public enum Grade {
    BRONZE {
        public int discount(int price) { return price * 5 / 100; }
    },
    GOLD {
        public int discount(int price) { return price * 15 / 100; }
    };

    public abstract int discount(int price);
}

✔️ 각 상수마다 동작을 다르게 정의 가능! (전략 패턴처럼 사용 가능)


6. 내장 메서드 지원

메서드 설명

values() 모든 enum 상수를 배열로 반환
valueOf(String) 문자열 → enum 상수로 변환
name() 상수 이름 문자열 반환
ordinal() 선언된 순서 (0부터 시작)

7. 직렬화와 비교에 강함

  • == 비교 가능 (객체 주소 동일)
  • Serializable, Comparable 자동 구현됨

🚨 주의할 점

항목 설명

valueOf()는 예외 발생 가능 잘못된 문자열 입력 시 IllegalArgumentException 발생
ordinal()은 구조 변경 시 깨질 수 있음 enum 순서를 바꾸면 의도치 않은 동작 가능성 있음 (주의해서 사용)

✅ 요약

기능 설명

타입 안정성 오타나 잘못된 값 방지
고정된 인스턴스 == 비교 안전
값과 메서드 포함 가능 각 상수에 필드/메서드 부여 가능
switch 지원 간편한 분기 처리
내장 기능 풍부 values(), valueOf(), ordinal() 등 제공

 

 

 

 

 

자 여기까지 지피티 엉아가 준내용이고 

이제 이..코드를 

 

요래 바꿀수 있다. 

+ Recent posts