열거형
- 여러 상수를 선언해야 할 때, 관련된 상수들을 같이 묶어 놓은 것
- java는 타입에 안전한 열거형을 제공한다(값&타입 체크)
- 값이 같더라도 타입이 다르면 컴파일 에러가 발생한다.
- 값을 지정하지 않아도 자동으로 0부터 시작하는 정수값 할당
//열거형
class Card { // 0, 1, 2, 3
enum Kind { CLOVER, HEART, DIAMOND, SPADE } //열거형 Kind를 정의
enum Value { TWO, THREE, FOUR } // 열거형 Value를 정의
final Kind kind; // 타입이 int가 아닌 Kind임에 유의!
final Value value;
}
----------------------------------------------------------------
class Card {
static final int CLOVER = 0;
static final int HEART = 1;
static final int DIAMOND = 2;
static final int SPADE = 3;
static final int TWO = 0;
static final int THREE = 1;
static final int FOUR = 2;
final int kind;
final int num;
}
if(Card.Kind.CLOVER == Card.Value.TWO) {
// 값은 0으로 같지만 타입이 불일치
// 컴파일 에러. 타입이 달라서 비교불가
열거형의 정의와 사용
- 정의 : 괄호 {} 안에 상수이름 나열
enum 열거형이름 { 상수명1, 상수명2, ... }
예) enum Direction { EAST, SOUTH, WEST, NORTH } - 사용 : 열거형이름.상수명
예) Direction.EAST - 비교 : == 와 compareTo() 사용가능
but, 비교연산자< , > 사용불가
compare To()는 두 비교대상이 같으면 0, 왼쪽이 크면 양수, 오른쪽이 크면 음수 반환
열거형의 조상 - java.lang.Enum
- java.lang.Enum : 모든 열거형의 조상 클래스
- Class<E> getDeclaringClass() : 열거형의 Class객체를 반환
- String name() : 열거형 상수의 이름 문자열로 반환
- int ordinal() : 열거형 상수의 순서 반환(0부터 시작 → 내부용도)
- T valudOf(Class<T> enumType, String name) : name과 일치하는 열거형 상수 반환
- values() : 정의된 모든 상수 출력(컴파일러가 자동추가)
- valueOf(String name) : 상수의 이름으로 문자열 상수에 대한 참조 획득 가능
열거형에 멤버 추가하기
- 열거형 상수의 값이 불규칙한 경우 → 열거형 상수이름(원하는값)
예) enum Direction { EAST(1), SOUTH(5), WEST(-1), NORTH(10) } - 지정된 값을 저장할 인스턴스 변수와 생성자 새로 추가
- 주의
- 열거형 상수를 모두 정의한 후 다른 멤버 추가
- 열거형 상수 마지막에 ;
- 열거형의 생성자는 외부에서 호출 불가 (열거형의 생성자는 제어자가 묵시적으로 Private)
'JAVA' 카테고리의 다른 글
clone 메서드 (0) | 2023.02.24 |
---|---|
애너테이션(annotation) (0) | 2022.12.19 |
컬렉션 프레임웍(collections framework) (0) | 2022.12.19 |
객체지향프로그래밍(2) - 상속, Object 클래스 (0) | 2022.12.19 |
객체지향프로그래밍 (0) | 2022.12.08 |