개발_웹/Java

Java | enum (열거형) 활용하기

zuyo 2019. 5. 10. 21:52
반응형

Enum은 클래스처럼 사용 가능한 상수 집합이다.

특징
- 정수값만 사용 가능한 C++과 달리(Do=1, Re=2, Mi=3), Java의 Enum은 문자열, 함수(Java 8 이상)도 사용 가능
- 나열할 수 있는 값들의 수는 제한이 없다.
- 클래스처럼 사용 가능하다. (필드, 메소드, 생성자 정의 가능)
- name에 띄어쓰기는 안 된다 (STARWARS - O, STAR WARS - X)

용도
1. 허용 가능한 값 제한 (국가명, 혈액형 등)
2. 공통 상수로 활용 (경로, 사이즈 등)

기본적인 사용 예

enum ESeason {
	SPRING, SUMMER, FALL, WINTER
}

public class EnumBasic {
	public static void main(String[] args) {
		System.out.println(ESeason.SPRING);
		// 출력 : SPRING
		
		System.out.println(ESeason.valueOf("SUMMER"));
		// 출력 : SUMMER
				
		System.out.println(ESeason.FALL.name());
		// 출력 : FALL

		for(ESeason season : ESeason.values()) {
			System.out.print(season);
		}
		// 출력 : SPRINGSUMMERFALLWINTER
		
		System.out.println("WINTER".equals(ESeason.WINTER));
		// 출력 : false

		System.out.println("WINTER".equals(ESeason.valueOf("WINTER")));
		// 출력 : false
		
		System.out.println("WINTER".equals(ESeason.WINTER.name()));
		// 출력 : true
	}
}

값 연결하여 쓰기

아래와 같이 파라미터에 다른 값을 연결해서 사용할 수 있다. 
필드와 파라미터를 가진 생성자, Getter 메소드만 구현해 주면 된다.

ESize.java

public enum ESize {
	MAX(100000), MIN(10);
	
	private int value;
	
	private ESize(int value) {
		this.value = value;
	}
	
	public int getValue() {
		return value;
	}
}

Main.java

public class Main {
	public static void main(String[] args) {
		
		int max = ESize.MAX.getValue();
		int min = ESize.MIN.getValue();
		
		System.out.println(max);
		// 100000
		System.out.println(min);
		// 10
	}
}

함수 연결하여 쓰기

EFunction.java

public enum EFunction {
	DOUBLE {
		int calc(int value) {
			return value*2;
		}
	},
	TRIPLE {
		int calc(int value) {
			return value*3;
		}
	};

	abstract int calc(int value);
}

Main.java

public class Main {
	public static void main(String[] args) {
		
		int num1 = EFunction.DOUBLE.calc(20);
		int num2 = EFunction.TRIPLE.calc(30);

		System.out.println(num1);
		// 40
		System.out.println(num2);
		// 90
	}
}
반응형