챗 지피티의 힘을 빌려 정리 해둠.
정리하면 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() 등 제공 |
자 여기까지 지피티 엉아가 준내용이고
이제 이..코드를

요래 바꿀수 있다.


'Java_library > Enumeration' 카테고리의 다른 글
| (Java_library) Enum을 사용하는이유_enum사용 후 리팩토링2 (0) | 2025.05.06 |
|---|---|
| (Java_library) Enum을 사용하는이유_enum사용 후 리팩토링1 (0) | 2025.05.06 |
| (Java_library) Enum을 사용하는이유_enum사용2 (0) | 2025.05.06 |
| (Java_library) Enum을 사용하는이유_enum사용전2 (0) | 2025.05.06 |
| (Java_library) Enum을 사용하는이유_enum사용전1 (0) | 2025.05.06 |