12.2.1 열거형이란?
- 서로 관련된 상수를 편리하기 선언하기 위해 것임
class Card{ enum Kind {CLOVA, HEART, DIAMOND, SPADE}; enum Value {TWO, THREE, FOUR}; final Kind kind; final Value value }
- 여러 상수를 정의할 때 사용하면 유용함
- 열거형은 값과 타입을 관리하기 때문에 논리적인 오류를 줄일 수 있음
- 상수의 값이 바뀌더라도 기존의 소스를 다시 컴파일하지 않아도 됨
12.2.2 열거형의 정의와 사용
- 정의
enum 열거형이름 {상수명1, 상수명2,...}; // 예시 enum Direction {EAST, SOUTH, WEST, NORTH}; // 사용 class Unit{ Direction dir = Direction.EAST; }
- 열거형 상수간의 비교에
==
를 사용할 수 있어 빠른 비교 성능을 제공함 - 단,
<
나>
와 같은 비교 연산자는 사용할 수 없고compareTo()
는 사용할 수 있음 - 💡 compareTo()는 두 비교 대상이 같으면 0, 왼쪽이 크면 양수, 오른쪽이 크면 음수를 반환함
- swith문의 조건식에도 열거형을 사용할 수 있음
void move(){ switch(dir){ case EAST: x++; break; case WEST: ... } }
- 모든 열거형의 조상은 java.lang.Enum임
- 열거형을 사용하면 컴파일러가 자동으로 다섯 가지의 메서드를 추가함
- Class getDeclaringClass() : 열거형의 Class 객체를 반환함
- String name() : 열거형상수의 이름을 문자열로 반환함
- int ordianal() : 열거형 상수가 정의된 순서를 반환함(0부터 시작)
- T valueOf(Class enumType, String name) : 지정된 열거형에서 name과 일치하는 열거형 상수를 반환함
- Object[] values() : 열거형에 정의된 모든 상수를 배열로 가져옴
12.2.3 열거형에 멤버 추가하기
- 열거형의 상수의 값이 불연속적인 경우 지정할 수 있음
enum Direction { EAST(1), SOUTH(5), WEST(-1), NORTH(10); private final int value; // 정수를 저장할 인스턴스 변수를 추가 Direction(int value) {this.value = value;} // 생성자를 추가 public int getValue() {return value;} }
- 열거형 생성자는 묵시적으로 private이라 외부에서 호출할 수 없음
Direction d = new Direction(1); // 불가능
- 열거형 상수에 하나 이상의 값을 지정할 수도 있음
enum Direction { EAST(1), SOUTH(5), WEST(-1), NORTH(10); private final int value; pricate final int symbol; Direction(int value, int symbol) { this.value = value; this.symbol = symbol; } public int getValue() {return value;} public int getSymbol() {return symbol;} }
- 열거형에 추상 메서드를 추가하려면 열거형 상수가 이 추상 메서드를 반드시 구형해야 함
enum Transporation{ abstract int fare(int distance); // 추상 메서드 protected final int BASIC_FARE; // protected로 해야 각 상수에서 접근 가능 }
12.2. 4 열거형의 이해
- 사실 열거형 상수 하나하나가 객체임
- 객체 주소를 비교하기 때문에
==
를 사용할 수 있는 것임
'자바의 정석 정리' 카테고리의 다른 글
자바의 정석 - 14.2 스트림 (0) | 2022.09.23 |
---|---|
자바의 정석 - 12.3 애너테이션(annotation) (0) | 2022.09.06 |
자바의 정석 - 12.1 지네릭스(Generics) (0) | 2022.09.06 |
자바의 정석 - 11.13 Collections (0) | 2022.09.05 |
자바의 정석 - 11.12 Properties (0) | 2022.09.05 |