Hello

Java 열거형(enum)

by 볼빵빵오춘기

열거형(enum)

  • 관련된 상수들을 같이 묶어 놓은 것이다.
  • Java는 타입에 안전한 열거형을 제공한다.(값&타입 모두 체크)
더보기

if(Card.CLOVER==Card.TWO)

값은 둘다 0이지만 타입이 불일치하여 비교 불가가 나옴.(컴파일에러)

 

열거형의 정의와 사용

 

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

모든 열거형은 Enum의 자손이며, 아래의 메소드를 상속받는다.

메서드 설명
Class<E> getDeclaringClass() 열거형의 Class객체를 반환
String name() 열거형 상수의 이름을 문자열로 반환
int ordinal() 열거형 상수가 정의된 순서를 반환(0부터 시작)
T valueOf(Class<T> enumType, String name) 지정된 열거형에서 name과 일치하는 열거형 상수를 반환
T valueOf(String name)  열거형 요소들을 순서대로 enum타입의 배열로 리턴.

valueOf(Class<T> enumType, String name), valueOf(String name) 는 static method이며,

 컴파일러가 자동으로 추가한다.

 

예제 코드

import java.util.*;

enum Direction { EAST, SOUTH, WEST, NORTH }

public class Try {
	public static void main(String[] args) {
		Direction d1 = Direction.EAST;
		Direction d2 = Direction.valueOf("WEST");
		Direction d3 = Enum.valueOf(Direction.class, "EAST");

		System.out.println("d1="+d1);
		System.out.println("d2="+d2);
		System.out.println("d3="+d3);
		
		System.out.println();

		System.out.println("d1==d2 ? "+ (d1==d2));
		System.out.println("d1==d3 ? "+ (d1==d3));
		System.out.println("d1.equals(d3) ? "+ d1.equals(d3));
//		System.out.println("d2 > d3 ? "+ (d1 > d3)); // 에러 why? 객체라서 비교연산자 x
		System.out.println("d1.compareTo(d3) ? "+ (d1.compareTo(d3)));
		System.out.println("d1.compareTo(d2) ? "+ (d1.compareTo(d2)));

		System.out.println();
		
		switch(d1) {
			case EAST: // Direction.EAST라고 쓸 수 없다.
				System.out.println("The direction is EAST."); break;
			case SOUTH:
				System.out.println("The direction is SOUTH."); break;
			case WEST:
				System.out.println("The direction is WEST."); break;
			case NORTH:
				System.out.println("The direction is NORTH."); break;
			default:
				System.out.println("Invalid direction."); break;
		}

		Direction[] dArr = Direction.values();

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

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기