본문 바로가기

하../java

ch12 열거형에 멤버 추가하기

열거형에 멤버 추가하기

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

괄호를 사용하려면 인스턴스 변수와 생성자를 새로 추가해줘야한다.
enum Direction{EAST(1) SOUTH(5), WEST(-1), NORTH(10); //끝에 ; 추가
 
 private final int value; //정수를 저장할 필드(인스턴스 변수)를 추가 private final이여야함
 Direction(int value){this.value = value;} //생성자를 추가 생성자는 항상 private
 
 public int getValue(){return value;}
} 
열거형의 생성자는 묵시적으로 private이므로 외부에서 객체생성 불가
Direction d = new Direction(1); //에러 열거형의 생성자는 외부에서 호출불가
enum Direction2 { 
	EAST(1, ">"), SOUTH(2,"V"), 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; }

	public static Direction2 of(int dir) {
        if (dir < 1 || dir > 4)  //0부터 3범위를 벗어나면 예외발생 
            throw new IllegalArgumentException("Invalid value :" + dir);

        return DIR_ARR[dir - 1];
	}	

	// 방향을 회전시키는 메서드. num의 값만큼 90도씩 시계방향으로 회전 
	public Direction2 rotate(int num) {
		num = num % 4;

		if(num < 0) num +=4; // num이 음수일떄는 시계 반대 방향으로 회전.

		return DIR_ARR[(value-1+num) % 4];
	}

	public String toString() {
		return name()+getSymbol();
	}
} // enum Direction2

class Ex12_6 {
	public static void main(String[] args) {
		for(Direction2 d : Direction2.values()) 
			System.out.printf("%s=%d%n", d.name(), d.getValue()); //d.oridinal 하면 0,1,2,3이 나옴 

		Direction2 d1 = Direction2.EAST;
		Direction2 d2 = Direction2.of(1);

		System.out.printf("d1=%s, %d%n", d1.name(), d1.getValue());
		System.out.printf("d2=%s, %d%n", d2.name(), d2.getValue());
		System.out.println(Direction2.EAST.rotate(1)); //rotate는 시계방향으로 회전 
		System.out.println(Direction2.EAST.rotate(2));
		System.out.println(Direction2.EAST.rotate(-1));//시계방향 반대로 회전 
		System.out.println(Direction2.EAST.rotate(-2));
	}
}
결과값
EAST=1
SOUTH=2
WEST=3
NORTH=4
d1=EAST, 1
d2=EAST, 1
SOUTHV
WEST<
NORTH^
WEST<

'하.. > java' 카테고리의 다른 글

ch12 표준 어노테이션  (0) 2021.12.25
ch12 어노테이션이란?  (0) 2021.12.25
ch12 열거형(enum) 열거형의 조상  (0) 2021.12.25
ch12 제네릭 타입의 형변환  (0) 2021.12.25
ch13 스레드의 우선순위 스레드 그룹  (0) 2021.12.24