타입 안전 열거형 패턴 - Type-Safe Enum Pattern
ㅁenum 열거형: 타입 안전성을 제공하고, 코드의 가독성을 높이며, 예상 가능한 값들의 집합을 표현하는 데 사용
정해진 객체만 사용할 수 있기 때문에, 잘못된 값을 입력하는 문제를 근본적으로 방지해 준다. (런타임 에러 아닌 컴파일 에러로 사전 차단)
※ enum은 enumeration의 약자이다
(특징)
1. 외부 생성도 컴파일 에러로 차단해준다.
2. 열거형은 java.lang.Enum 를 자동(강제)으로 상속받는다..
3. 열거형은 이미 java.lang.Enum 을 상속받았기 때문에 추가로 다른 클래스를 상속을 받을 수 없다.
4. 열거형은 인터페이스를 구현할 수 있다.
5. 열거형에 추상 메서드를 선언하고, 구현할 수 있다. (이 경우 익명 클래스와 같은 방식을 사용)
6. 열거형은 switch문에도 사용 가능하다.
7. static import를 사용하면 더 가독성을 높일 수 있다.
e.g. Tier.GOLD를 static import를 통해 GOLD로 사용
[열거형 주요 메서드]
- values(): 모든 enum 상수를 포함하는 배열을 반환
- valueOf(String name): 주어진 이름과 일치하는 enum 상수를 반환
- name(): enum 상수의 이름을 문자열로 반환
- toString(): enum 상수의 이름을 문자열로 반환
name() 메서드와 유사하지만, toString() 은 직접 오버라이드 할 수 있다
- ordinal(): enum 상수의 선언 순서를 반환(0부터 시작)
(주의) ordinal()은 가급적 사용하지 않는 것이 좋다
이 값을 사용하다가 중간에 상수를 선언하는 위치가 변경된다면 전체 상수의 위치가 모두 변경될 수 있기 때문이다.
예시: 중간에 BASIC 다음에 SILVER 등급이 추가되는 경우 GOLD, DIAMOND 의 값이 하나씩 추가된다.
**기존**
`BASIC: 0`
`GOLD: 1`
`DIAMOND: 2`
**추가**
`BASIC: 0`
`SILVER: 1`
`GOLD: 2`
`DIAMOND: 3`
기존 GOLD의 ordinal() 값인 1을 데이터베이스나 파일에 저장하고 있었는데, 중간에 SILVER 가 추가되면 데이터베이스나 파일에 있는 값은 그대로 1로 유지되지만, 애플리케이션 상에서 GOLD는 2가 되고, SILVER는 1이 된다. 쉽게 이야기해서 ordinal() 의 값을 사용하면 기존 GOLD 회원이 갑자기 SILVER 가 되는 큰 버그가 발생할 수 있다.
참고 및 출처: 김영한의 실전 자바 - 중급 1편
'Language > Java' 카테고리의 다른 글
[Java] 중첩 클래스에 대한 고찰 (0) | 2024.09.09 |
---|---|
[Java API] 날짜와 시간 라이브러리 (3) | 2024.08.27 |
[Java API] Math 클래스, Random 클래스 (0) | 2024.08.23 |
[Java API] System 클래스 (0) | 2024.08.23 |
[Java API] Class 클래스 (0) | 2024.08.23 |