enum(열거형)은 상수(constant) 들을 하나의 그룹으로 묶어 관리하기 위한 특별한 클래스입니다.
final static 상수를 일일이 정의하는 대신, 타입 안전한 상수 집합을 만들 수 있습니다.
| 특징 | 설명 |
|---|---|
| 타입 안전성 | 허용된 상수 값만 사용할 수 있음 (오타 방지) |
| 코드 가독성 향상 | 상수를 그룹화하여 의미 있는 코드 작성 가능 |
| 내부 필드와 메서드 포함 가능 | 단순 상수 외에 부가 정보(예: 설명, 한글명 등) 추가 가능 |
| switch문과 함께 자주 사용 | 분기 처리 시 직관적 사용 가능 |
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, FRIDAY
}
각 상수는 Day 타입의 객체로 취급됩니다.
MONDAY → Day.MONDAY 형태로 접근합니다
package com.mult6.e_enum;
public enum Day {
MONDAY("월요일"),
TUESDAY("화요일"),
WEDNESDAY("수요일"),
FRIDAY("금요일");
private final String koreanDay;
// 생성자는 private 형태로 자동 설정됨
Day(String koreanDay) {
this.koreanDay = koreanDay;
}
public String getKoreanDay() {
return koreanDay;
}
}
package com.mult6.e_enum;
public class Run {
public static void main(String[] args) {
Day today = Day.MONDAY;
// switch문 활용
switch (today) {
case MONDAY:
System.out.println("월요일입니다!");
break;
case FRIDAY:
System.out.println("금요일입니다!");
break;
}
// 모든 enum 상수 출력
for (Day day : Day.values()) {
System.out.println(day);
}
// 문자열을 enum으로 변환
Day day = Day.valueOf("MONDAY");
System.out.println(day);
// 한글 요일 출력
System.out.println(today.getKoreanDay());
// enum의 기본 제공 메서드
System.out.println(today.name()); // "MONDAY"
System.out.println(today.ordinal()); // 0 (순서 인덱스)
}
}
public enum OrderStatus {
PENDING("대기 중"),
SHIPPED("배송 중"),
DELIVERED("배송 완료"),
CANCELED("취소됨");
private final String label;
OrderStatus(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
}
장점
- if문 대신 switch(OrderStatus)로 간결하게 관리
- DB 저장 시 문자열/코드 매핑이 쉬움
public enum Role {
USER("일반회원"),
ADMIN("관리자"),
MANAGER("매니저");
private final String description;
Role(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
실무 활용 예
- 로그인 사용자 권한 체크
if (user.getRole() == Role.ADMIN) { // 관리자만 접근 가능 } ```'
public enum Country {
KOREA("KR"),
USA("US"),
JAPAN("JP");
private final String code;
Country(String code) { this.code = code; }
public String getCode() { return code; }
}
코드 상에서 상수로 관리하면
- 오타 방지
- IDE 자동완성 지원
- 유지보수 용이
enum은 단순한 상수보다 안전하고 직관적인 상수 관리 도구
메서드와 필드를 함께 사용할 수 있어 클래스 수준의 확장성
switch문, valueOf(), values() 등과 함께 가장 자주 쓰이는 패턴
" enum은 상수를 객체처럼 다룰 수 있는, 자바의 스마트한 상수 집합이다.”