package study.first;

public class Study {

	public static void main(String[] args) {

	}

}

enum FinalValues {

	// enum 클래스의 열거 상수 (자동으로 public static final로 선언)
	CLOCK_SIZE(100), CLOCK_COLOR("White"), BOOK_SIZE(200), BOOK_COLOR("Blue");

	// 값을 담을 필드 생성(private 캡슐화)
	private int size;
	private String color;

	// size 생성자 선언
	FinalValues(int size) {
		this.size = size;
	}

	// color 생성자 선언
	FinalValues(String color) {
		this.color = color;
	}

	// size getter
	int getSize() {
		return size;
	}

	// color getter
	String getColor() {
		return color;
	}
}

 

 

 

 

 

[ Enum Class 인스턴스 생성 ]

  • class.상수이름
  • class.valueOf("상수이름") 메소드

둘 다 같은 방식으로 인스턴스를 만들 수 있지만, valueOf 메소드를 사용하면 String 변수를 사용해서 인스턴스를 생성할 수 있습니다. 조건에 따라 생성자를 달리해야 한다면 메소드를 이용하는 것이 효율적입니다.

		// Enum Class 인스턴스 생성
		FinalValues p = FinalValues.CLOCK_SIZE;
		String name = "CLOCK_SIZE";
		FinalValues p = FinalValues.valueOf(name);

 

 

 

 

 

 

[ 상수 이름을 가져오는 방법 ]

  • 인스턴스 자체가 상수 이름을 반환
  • 인스턴스.name() 메소드
  • 인스턴스.toString() 메소드

세 가지 모두 상수 이름을 가져올 수 있습니다. 길게 쓸 필요없이 그냥 인스턴스 자체를 사용하면 편리합니다.

 

	public static void main(String[] args) {
		
		// Enum Class 인스턴스 생성
		FinalValues p = FinalValues.CLOCK_SIZE;
		
		// 상수 이름 출력
		System.out.println(p);
		System.out.println(p.name());
		System.out.println(p.toString());		
	}

 

 

 

 

 

[ 열거 상수의 위치값을 가져오는 방법 ]

  • 인스턴스.ordinal() 메소드

열거 상수가 순서대로 나열되어 있고, 리스트와 같이 0부터 시작합니다. 해당 상수가 몇 번째 상수인지 값을 반환합니다.

 

	public static void main(String[] args) {
		
		// Enum Class 인스턴스 생성
		FinalValues p = FinalValues.CLOCK_SIZE;
		
		// 상수 위치 출력
		System.out.println(p.ordinal());	
	}

 

 

 

 

 

[ 열거 상수의 상대적 위치를 알아내는 방법 ]

  • 인스턴스.compareTo(클래스.상수이름) 메소드

compareTo 메소드에 전달한 인자값(상수이름)을 기준으로, 해당 인스턴스가 가진 상수의 상대적 위치를 반환합니다. -2는 BOOK_SIZE보다 두 번째 앞에 위치한다는 의미입니다.

	public static void main(String[] args) {
		
		// Enum Class 인스턴스 생성
		FinalValues p = FinalValues.CLOCK_SIZE;
		
		// 상대적 위치 정보 출력
		System.out.println(p.compareTo(FinalValues.BOOK_SIZE));	
	}

 

 

 

 

 

 

 

[ 모든 열거 상수를 알아내는 방법 ]

  • 인스턴스.values() 메소드

해당 인스턴스의 Enum Class가 가지고 있는 모든 상수이름과 값을 불러올 수 있습니다. 리스트에 넣어주면 자동 생성됩니다.

 

	public static void main(String[] args) {

		// Enum Class 인스턴스 생성
		FinalValues p = FinalValues.CLOCK_SIZE;

		// 열거 상수 리스트 생성
		FinalValues[] list = FinalValues.values();

		// 리스트 출력
		for (int i = 0; i < list.length; i++) {
			System.out.print (list[i] + " : ");
			if (list[i].getSize() != 0)
				System.out.println(list[i].getSize());
			else if (list[i].getColor() != null)
				System.out.println(list[i].getColor());				
		}
	}