열거형 타입이 만들어지게 된 배경
기존 메서드들의 매개 변수로 String을 받는다고 가정을 했을 때
- 타입 안정성을 보장 할 수 없음 (어떤 문자열이 들어와도 로직 수행) → 컴파일 단계에서 오류를 찾아낼 수 없음
- 데이터 일관성 부족 (대소문자 구분, 개발자의 오타 등등)
이 문제를 해결하기 위해 문자열 상수를 사용해 해결해보고자 함
public class User {
public static final String BASIC = "BASIC";
}하지만 여전히 String 값에 대한 입력에 무방비하며 일관성을 보장해 주지 못한다.
타입 안전 열거형 패턴 (직접 구현)
앞선 문제들을 해결하기 위해 열거형 패턴의 등장
public class User{
public static final User BASIC = new User();
// class를 직접 생성하는 것을 제한
private User(){};
}String 값의 입력은 막을 수 있고, 타입 역시 보장 하지만 따로 개발하던 개발자가 Class를 마음대로 생성해 들어오는 문제가 발생할 여지가 있음 → private 생성자를 만들어 임의로 Class 생성하는 것을 제한
장점
- 타입 안정성의 향상 잘못된 값을 입력하는 문제를 근본적으로 차단, 컴파일 시점에 오류 발견
- 제한된 인스턴스 생성 미리 정의된 값들만 사용 가능하게 됨
열거형 타입 (축약형)
public enum User{
BASIC
}앞서 만들었던 과정을 쉽게 사용할 수 있도록 프로그래밍 언어에서 제공한다. 위 코드는 직접 구현한 코드를 내포한 형태이다.
Enum의 주요 메서드
- values() : Enum 상수들의 배열 반환
- valueOf() : 주어진 이름과 일치하는 ENUM 상수 반환
- name() : Enum 상수의 이름을 문자열로 반환
- toString() : Enum의 상수 이름을 문자열로 반환 name과의 차이점 : 직접 오버라이드 가능
참고 사항
- static import 사용시 더 간결한 코드 작성 가능
- class이기 때문에 안에 메서드 작성, 비즈니스 로직 작성 가능