12-17~20 열거형(enum)

11022 단어 JavaJava

열거형

  • 관련된 상수들을 같이 묶어 놓은 것
  • Java는 타입에 완전한 열거형을 제공 (Java의 열거형은 값 & 타입 모두 체크)
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.CLOVER == Card.TWO)	// true이지만 false이여야 의미상 맞음.
}

위 코드를 다음과 같이 열거형으로 작성할 수 있다.

class Card{
    enum Kind { CLOVER, HEART, DIAMOND, SPADE }	// 열거형 Kind 정의
    enum Value { TWO, THREE, FOUR }		// 열거형 Value 정의
    
    final Kind kind;	// 타입이 int가 아닌 Kind 인것에 유의
    final Value value;
    
    if(Card.Kind.CLOVER == Card.Value.TWO) // 컴파일 에러!! 타입이 달라서 비교 불가.
}

열거형의 정의와 사용

  • 열거형을 정의하는 방법
enum 열거형이름 { 상수명1, 상수명2, ... }
  • 열거형 타입의 변수를 선언하고 사용하는 방법
enum Direction { EAST, SOUTH, WEST, NORTH }

class Unit{
    int x, y;		// 유닛의 위치
    Direction dir;	// 열거형 인스턴스 변수를 선언
    
    void init(){
    	dir = Direction.EAST;	// 유닛의 방향을 EAST로 초기화
    }
}
  • 열거형 상수의 비교에 ==와 compareTo(), equals() 사용 가능 (∵ 객체이므로)
if(dir == Direction.EAST){
    x++;
} else if (dir > Direction.WEST) {	// Error!! 열거형 상수에 비교연산자 사용불가
	...
    // a.compareTo(b) : return a - b
} else if (dir.compareTo(Direction.WEST) > 0) {	// compareTo()는 가능
	...
}

열거형의 조상 - java.lang.Enum

  • 모든 열거형은 Enum의 자손이며, 아래의 메서드를 상속받는다.
  • values(), valueOf()는 컴파일러가 자동으로 추가
static E[] values()
static E valueOf(String name)

Direction[] dArr = Direction.values();

for(Direction d : dArr)	//	for(Direction d : Direction.values())
	System.out.println("%s=%d%n", d.name(), d.ordinal());

Direction d = Direction.valueOf("WEST")	// Direction d = Direction.WEST

좋은 웹페이지 즐겨찾기