Hello

Java 열거형 멤버추가하기

by 볼빵빵오춘기

열거형에 멤버 추가하기

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

 

2. 괄호()를 사용하려면, 인스턴스 변수와 생성자를 새로 추가해 줘야 한다.

⇒ 저장할 iv를 선언해줘야한다.(+ 생성자도 추가해줘야한다.) 

⇒ 괄호는 생성자 호출인것이다.

 

3. 열거형의 생성자는 묵시적으로 private이므로, 외부에서 객체생성은 불가능하다.

 

예제 코드

import java.util.*;

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) 
            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


public class Try {
	public static void main(String[] args) {
		for(Direction2 d : Direction2.values()) 
			System.out.printf("%s=%d%n", d.name(), d.getValue()); 

		System.out.println();
		
		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();
		
		System.out.println(Direction2.EAST.rotate(1));
		System.out.println(Direction2.EAST.rotate(2));
		System.out.println(Direction2.EAST.rotate(-1));
		System.out.println(Direction2.EAST.rotate(-2));
		
	}
}

'👩🏻‍💻 About 프로그래밍 > Java' 카테고리의 다른 글

Java 표준애너테이션  (0) 2023.12.09
Java 애너테이션(Annotation)  (1) 2023.12.09
Java 열거형(enum)  (0) 2023.12.09
Java 지네릭 타입의 형변환  (0) 2023.12.09
Java 와일드카드, 지네릭메서드  (0) 2023.12.08

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기