프로그래밍/- java

enum(열거형)

즐겁게 하하하 2022. 2. 4. 09:13
728x90
values() , valueOf() 도 사용 가능 :: 컴파일러가 자동으로 추가함.
enum  Name { 상수명1 , 상수명2 .. }
   final Name kind; :: 타입이 Name 타입
  - == 와 compareTo() 사용가능  < 같은 비교 연산자 불가능
  - java.lang.Enum  :: 열거형의 조상
  - 열겨헝의 생성자는 묵시적으로 private  :: 외부에서 객체 생성 불가
    Direction d = new Direction(1);     :: 불가능
 
 
enum Direction { EAST, SOUTH, WEST, NORTH }
enum Direction2 { 
   EAST(1, ">>"), SOUTH(2,"vV"), WEST(3, "<<"), NORTH(4,"^^"); 
   :: 값을 지정할수 있으려면 생성자가 필요하다.

	private static final Direction2[] DIR_ARR = Direction2.values();
	private final int value;  :: 정수를 지정할 필드 필요 ( 인스턴스 변수 추가 )
	private final String symbol;

	Direction2(int value, String symbol) { // 생성자::접근 제어자 private이 생략됨
		this.value  = value;
		this.symbol = symbol;
	}

	public int getValue()     { return value;  }
	public String getSymbol() { return symbol; }
}

class Ex12_5 {
	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); :: d1=EAST
		System.out.println("d2="+d2);  :: d2=WEST
		System.out.println("d3="+d3);  :: d3=EAST

		System.out.println("d1==d2 ? "+ (d1==d2));  :: d1==d2 ? false
		System.out.println("d1==d3 ? "+ (d1==d3));  :: d1==d3 ? true
		System.out.println("d1.equals(d3) ? "+ d1.equals(d3)); :: d1.equals(d3) ? true
//		System.out.println("d2 > d3 ? "+ (d1 > d3)); // 에러
		System.out.println("d1.compareTo(d3) ? "+ (d1.compareTo(d3))); ::d1.compareTo(d3) ? 0
		System.out.println("d1.compareTo(d2) ? "+ (d1.compareTo(d2))); ::d1.compareTo(d2) ? -2

		switch(d1) {  :: The direction is EAST.
			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()); 
            //EAST=0  SOUTH=1  WEST=2  NORTH=3
	}
}
 
 

 

728x90