본문 바로가기
JAVA

[JAVA] enum (열거형 상수)

by Amy IT 2022. 5. 30.

enum은 열거형 상수로서, 데이터가 몇 개의 한정된 상수값으로 구성될 때 주로 사용됩니다. 이전에는 public static final로 지정된 일반적인 상수를 사용하였으나, JDK 1.5 버전부터 enum을 사용할 수 있게 되었습니다. enum을 이용하면 반드시 정의된 값만 사용하도록 설정할 수 있으며, 만약 잘못된 값을 설정할 경우 컴파일 시 에러가 발생하여 개발 단계에서 문제점을 곧바로 찾을 수 있게 됩니다.

 

enum 은 다음과 같이 생성하고 사용할 수 있습니다. 열거한 상수값에는 0번부터 자동으로 인덱스값이 부여됩니다. 

public enum 타입 {상수값1, 상수값2, 상수값3};
타입 변수명 = 타입.상수값;

 

다음은 enum의 대표적인 메소드입니다. 

 

메소드 설명
name() enum 상수의 이름을 String으로 반환
ordinal() 0부터 시작하는 enum 상수의 인덱스값 반환
values() enum 상수값을 배열로 반환

 

예를 들어, 색상을 blue, red, yellow 세 가지만 사용 가능하도록 설정하고자 합니다. 우선 다음과 같이 일반적인 상수를 선언하고 조건문을 만들어 볼 수 있습니다. chekc() 함수로 전달된 값이 blue, red, yellow, 혹은 그 외의 값인지 검사하고 있습니다.

public class EnumTest1 {
	public static final String BLUE = "BLUE";
	public static final String RED = "RED";
	public static final String YELLOW = "YELLOW";
	
	public static void check(String color) {
		switch (color) {
		case BLUE: System.out.println("BLUE");break;
		case RED: System.out.println("RED");break;
		case YELLOW: System.out.println("YELLOW");break;
		default: System.out.println("default");break;
		}
	}
	public static void main(String[] args) {
		check(BLUE);
		check(RED);
		check(YELLOW);
		check("PINK");
	}
}

하지만 이렇게 하면 blue, red, yellow 각각에 맞는 문장을 실행할 수는 있어도, blue, red, yellow가 아닌 다른 색상이 넘어오는 것 자체를 막을 수는 없습니다. 이때 필요한 것이 enum 입니다. 

 

이번에는 Color 데이터 타입으로 열거형 상수를 생성하고, 메인함수에서 각 상수값에 접근해 보고 있습니다. values() 함수를 이용해 열거된 상수값 정보를 배열로 반환받아 각 데이터를 출력해 보고 있습니다.  

public class EnumTest2 {
	public enum Color {BLUE, RED, YELLOW}

	public static void main(String[] args) {
		Color c = Color.BLUE;
		Color c2 = Color.RED;
		Color c3 = Color.YELLOW;
		System.out.println(c);
		System.out.println(c2);
		System.out.println(c3);
		
		Color [] colors = Color.values(); //배열로 반환한걸 배열로 저장
		for (Color color : colors) {
			System.out.println(color.name()+"\t"+color.ordinal());
		}
	}
}

 

이제 이를 이용해 세 가지 색상이 아닌 색상값을 사용시 컴파일 에러가 발생하게 만들 수 있습니다. 

public class EnumTest3 {
	public enum Color {BLUE, RED, YELLOW}
	
	public static void check(Color color) {
		switch (color) {
		case BLUE: System.out.println("BLUE");break;
		case RED: System.out.println("RED");break;
		case YELLOW: System.out.println("YELLOW");break;
		default: System.out.println("default");break;
		}
	}
	public static void main(String[] args) {
		check(Color.BLUE);
		check(Color.RED);
		check(Color.YELLOW);
//		check("PINK"); //컴파일 에러
	}
}

check() 함수의 매개변수 타입을 열거데이터형으로 설정함으로써 열거 타입에 정의된 값이 아니면 인자로 받을 수 없게 설정하였습니다. 정의된 값이 아닌 다른 색상을 사용하려고 하면 컴파일 에러가 발생하게 됩니다. 

 

이상으로 enum에 대한 기본적인 내용을 정리해 보았습니다.

 

 

 

댓글