문자열과 타입 안정성
열거형 타입이 생긴 이유
문자열을 사용하면 다음과 같은 문제가 자주 발생한다.
- 타입 안정성 부족: 문자열은 오타가 발생하기 쉽고 유효하지 않은 값이 입력 될 수 있다.
String
으로 상태나 카테고리를 표현하면 잘못된 문자열을 실수로 입력할 가능성이 있다.
- 이렇게 잘못된 값은 컴파일시에 감지가 되지않고 런타임에서만 오류가 발생하기 때문에 디버깅이 어려워 질수도 있다.
- 데이터 일관성: 문자열을 다양한 형식으로 입력할 수 있어 일관성이 떨어진다.
타입 안전 열거형
앞서 언급한 문제를 해결하기 위해 나온 것이 바로 타입 안전 열거형 패턴이다. 중요한 것은 타입 안전 열거형 패턴을 사용하면 나열한 항목만 사용할 수 있다는 점이다. 즉, String
처럼 아무 문자열이나 다 사용 할 수 있는 것이 아닌 우리가 나열한 문자만 사용이 가능하다.
타입 안전 열거형 패턴 의 장점
- 타입 안정성 향상: 정해진 객체만 사용할 수 있어, 잘못된 값을 엽력하는 문제를 근본적으로 방지할 수 있다.
- 데이터 일관성: 정해진 객체만 사용하므로 데이터의 일관성이 보장된다.
- 제한된 인스턴스 생성: 클래스는 사전에 정의된 몇개의 인스턴스만 생성하고, 외부에서는 이 인스턴스들만 사용할 수 있도록 한다.
Enum Type 예시
package enumeration.ex3;
public enum Grade {
BASIC, GOLD, DIAMOND
}
- 열거형을 정의할 때는
class
대신에 enum
을 사용한다.
- 원하는 상수의 이름을 나열하면 된다.
public class Grade extends Enum {
public static final Grade BASIC = new Grade();
public static final Grade GOLD = new Grade();
public static final Grade DIAMOND = new Grade();
//private 생성자 추가
private Grade() {}
}
- 열거형도 클래스다.
- 열거형은 자동으로 `
java.lang.Enum
을 상속받는다.
- 외부에서 임의로 생성할 수 없다.
- 열거형은 스위치문에 사용할 수 있는 장점도 있다.
열거형 주요 메서드
- values(): 모든 ENUM 상수를 포함하는 배열을 반환한다.
- valueOf(String name): 주어진 이름과 일치하는 ENUM 상수를 반환한다.
- name(): ENUM 상수의 이름을 문자열로 반환한다.
- ordinal(): ENUM 상수의 선언 순서(0부터 시작)를 반환한다.
- toString(): ENUM 상수의 이름을 문자열로 반환한다.
name()
메서드와 유사하지만, toString()
은 직접 오버라이드 할 수 있다.
출처: https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-1/dashboard