enum이란?
enum(열거형) 은 미리 정해진 값들만 사용할 수 있도록 만들어주는 자료형이다.
선택지가 이미 정해져 있는 타입이라고 생각하면 됨.
예를 들어 주문 상태는 아래 네 가지 중 하나만 존재한다.
- 주문 완료
- 배송 준비
- 배송 중
- 배송 완료
이처럼 가능한 값이 정해져 있을 때 enum을 사용하면 된다.
enum이 필요한 이유
만약 String으로 상태를 관리한다면
String status = "배송중";
다음과 같은 문제들이 발생할 수 있다.
status = "배송중";
status = "배송 중"; // 띄어쓰기
status = "배숑중"; // 오타
status = "사과"; // 엉뚱한 값
모두 컴파일 오류 없이 저장된다.
즉, 아무 문자열이나 저장할 수 있기 때문에 실수가 발생하기 쉽다.
enum 사용하기
public enum OrderStatus {
ORDERED,
PREPARING,
SHIPPING,
COMPLETED
}
사용할 때는
OrderStatus status = OrderStatus.SHIPPING;
status = OrderStatus.COMPLETED; // 사용 가능
status = "배송중"; // 컴파일 오류, 사용불가
status = "사과"; // 컴파일 오류, 사용 불가
enum을 사용하는 이유
1. 오타를 방지할 수 있다.
OrderStatus.SHIPPING
처럼 사용하기 때문에
OrderStatus.SHIPPNG
처럼 오타를 내면 컴파일 단계에서 바로 알려준다.
2. 코드가 더 안전하다.
String은 아무 값이나 저장할 수 있지만,
enum은 정해진 값만 사용할 수 있다.
예상하지 못한 데이터가 들어오는 것을 막아준다.
3. 가독성이 좋아진다.
if (status == OrderStatus.SHIPPING)
이렇게 작성하면
"배송 중인지 확인하는 코드"
라는 것을 바로 알 수 있다.
enum은 언제 사용할까?
다음처럼 선택지가 정해져 있는 데이터에 많이 사용한다.
- 회원 등급
- 주문 상태
- 결제 방식
- 로그인 방식
- 요일
- 계절
- 게임 직업
- 방향(상, 하, 좌, 우)
enum도 클래스이다.
enum은 단순히 상수만 저장하는 것이 아니라,
특별한 클래스이다.
그래서 변수, 생성자, 메서드도 가질 수 있다.
public enum Season {
SPRING("봄"),
SUMMER("여름"),
AUTUMN("가을"),
WINTER("겨울");
private final String korean;
Season(String korean) {
this.korean = korean;
}
public String getKorean() {
return korean;
}
}
사용
System.out.println(Season.SPRING.getKorean());
출력
봄
자주 사용하는 메서드
values()
모든 enum 값을 배열로 반환한다.
for (Season season : Season.values()) {
System.out.println(season);
}
name()
enum 이름을 문자열(String)로 반환한다.
System.out.println(Season.SPRING.name());
출력
SPRING
valueOf()
문자열을 enum으로 변환한다.
Season season = Season.valueOf("SPRING");
enum은 어디에 만들까?
보통은 별도의 파일로 만들어 사용한다.
Member.java
Order.java
Product.java
OrderStatus.java ← enum
Grade.java ← enum
Role.java ← enum
필요한 클래스에서 가져다 사용하면 된다.
public class Order {
private OrderStatus status;
}
'Java' 카테고리의 다른 글
| Java 기초 정리 - 추상 클래스(abstract class)와 팩토리 메서드 (0) | 2026.06.15 |
|---|---|
| JAVA 기초정리 - 다형성 (Polymorphism) (0) | 2026.06.12 |
| Java 기초 정리 - 상속(Inheritance) (0) | 2026.06.11 |
| JAVA 기초정리 - 다형성과 예외처리 (0) | 2026.06.09 |
| JAVA 기초 정리 - 객체지향 (final, 인터페이스, 캡슐화, 상속) (0) | 2026.06.08 |