Enum
Type-safe Enum Pattern
Enum이 등장하기 전에 상수 집합을 표현하기 위해 사용하던 패턴. int·String 상수보다 ==타입 안전성(Type Safety)==이 높다.
설명
Enum이 등장하기 전에 상수 집합을 표현하기 위해 사용하던 패턴- 객체를 생성하고 미리 정적 상수(static final) 로 만들어 사용한다.
- 타입이 int, String 같은 기본 상수보다 타입 안정성(Type Safety) 이 높다.
예시
public class Grade {
private int point;
private Grade(int point) {
this.point = point;
}
private static final Grade GOLD = new Grade(10);
private static final Grade DIAMOND = new Grade(20);
public int getPoint() {
return this.point;
}
}
장점
- 생성자를
private로 막아 외부에서 객체 생성 불가 - 정적 상수로 미리 생성된 객체만 사용 가능
- 타입이
Grade이기 때문에 다른 타입이 들어올 수 없음
단점
- 코드가 번거롭다 -> 상수마다 객체를 직접 만들어야 한다.
- 상수 목록을 자동으로 조회할 수 없다
- switch 문 사용 불가
- 직렬화 / 비교 / 이름 관리 기능 부족
Enum
Enum은 서로 관련된 상수들의 집합을 타입으로 정의하는 특별한 클래스이다.
예시
enum Grade {
GOLD(10),
DIAMOND(20);
private int point;
Grade(int point) {
this.point = point;
}
public int getPoint() {
return this.point;
}
}
Grade grade = Grade.GOLD;
int point = grade.getPoint();
장점
- 타입 안정성 (Type Safety)
Enum은 클래스이다Enum은 싱글톤 객체이다Enum은 여러 유용한 메서드를 제공한다. | 특징 | 설명 | | ------------ | ------------ | | 타입 안정성 | 잘못된 값 방지 | | 가독성 | 의미 있는 상수 | | 객체지향 | 필드/메서드 사용 가능 | | switch 사용 가능 | 제어문 활용 | | 싱글톤 보장 | 메모리 효율 |
정리
| 구분 | Type-safe Enum Pattern | Enum |
|---|---|---|
| 등장 시기 | Java 1.5 이전 | Java 1.5 |
| 구현 방식 | 직접 클래스 구현 | 언어 차원 지원 |
| 코드량 | 많음 | 적음 |
| values() | 없음 | 있음 |
| switch | 불편 | 가능 |
| 사용성 | 낮음 | 높음 |