열거형(enum)

김설영·2022년 4월 19일
0

열거형

  • 서로 관련된 상수들을 함께 묶어놓은 것.

  • Java는 타입에 안전한 열거형을 제공한다. (값, 타입 둘 다 체크함)
    즉, 값은 같아도 타입이 다르면 비교불가 컴파일 에러가 발생한다.

  • 열거형 상수의 비교에 '=='과 'compareTo()'만 사용 가능
    비교 연산자 >, < 등은 사용 불가!
    compareTo() 복습 : a.compareTo(b)
    -> a가 크면 양수 반환
    -> 같으면 0 반환
    -> b가 크면 음수 반환

  • 열거형의 조상 : java.lang.Enum
    name() -> 열거형 상수의 이름을 문자열로 반환
    ordinal() -> 열거형 상수가 정의된 순서를 반환(몇 번째로 선언되었나? 0부터 시작!)
    T valueOf(Class<T> enumType, String name) -> 지정된 열거형에서, name과 일치하는 열거형 상수 반환

  • values(), valueOf()는 컴파일러가 자동으로 추가
    values() : 모든 열거형 상수를 배열로 반환
    valueOf() : 열거형 상수의 이름을 주면, 열거형상수 반환 == Kind.상수1과 같음

class Card {
	// 열거형 정의 방법 : enum 열거형 이름 { 상수명1, 상수명2, ... }
    // 기본적으로, 상수의 순서대로 0, 1, 2, 3... 의 값이 부여됨.
    enum Kind { 상수1, 상수2, 상수3, 상수4 }
    enum Value { 상수5, 상수6, 상수7 }
    
    // 열거형 인스턴스 변수 선언
    final Kind kind;	// 타입이 int가 아닌 Kind임!
    final Value value;	// 열거형 안에 있는 값만 들어올 수 있음
    
    void init() {
    	kind = Kind.상수1;  // kind 변수에 Kind 열거형 안에 있는 상수1이라는 값 저장.
    }
}

열거형에 멤버 추가하기

  • 불연속적인 열거형 상수의 경우, 원하는 값을 괄호() 안에 적는다.

  • 열거형의 생성자는, 묵시적으로 항상 private이다. 외부에서 객체 생성이 불가함!

enum Direction { 
	//   ↓ 이거 사실 생성자임. 생성자 호출하는거임.
	EAST(1), SOUTH(5), WEST(-1), NORTH(10);  // 끝에 ; 를 추가해야 함.
    
    private final int value;  // 정수를 저장할 필드(인스턴스 변수)를 선언 해주어야 함.
    // 생성자를 호출할 수 있으려면, 생성자가 있어야함.
    // 열거형의 생성자는 항상 private!
    Direction(int value) { this.value = value; }  // 생성자 추가
    
    public int getValue() { return value; }
}
profile
블로그 이동하였습니당! -> https://kimsy8979.tistory.com/

0개의 댓글