자바에서 열거형(Enumeration, enum)은 이름이 지정된 상수들의 집합을 나타냅니다. 열거형은 다음과 같은 문법으로 생성할 수 있습니다.
enum Days {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}메소드 안에서 열거형 정의가 불가능한 이유
열거형은 클래스 내부에는 정의할 수 있지만, 메소드 내부에서는 정의할 수 없습니다. 만약 메소드 안에 열거형을 선언하려고 하면 컴파일 타임에 다음과 같은 오류가 발생합니다.
"enum types must not be local" (열거형 타입은 로컬로 선언될 수 없습니다)
이는 자바의 설계상 제약으로, 열거형은 본질적으로 클래스 레벨의 정적 멤버처럼 동작하기 때문에 메소드와 같은 지역 범위(local scope)에 존재할 수 없기 때문입니다.
오류 발생 예제
public class EnumExample{
public void sample() {
enum Vehicles {
Activa125, Activa5G, Access125, Vespa, TVSJupiter;
}
}
}컴파일 오류 출력
EnumExample.java:3: error: enum types must not be local
enum Vehicles {
^
1 error올바른 사용 방법: values() 활용하기
메소드 내부에서 열거형 상수를 사용하고 싶다면, 열거형을 클래스 내부(메소드 외부)에 먼저 선언한 후, 메소드 안에서 values() 메소드를 통해 해당 상수들에 접근하면 됩니다.
정상 동작 예제
public class EnumerationExample {
enum Enum {
Mango, Banana, Orange, Grapes, Thursday, Apple
}
public void testMethod(){
Enum constants[] = Enum.values();
System.out.println("Value of constants: ");
for(Enum d: constants) {
System.out.println(d);
}
}
public static void main(String args[]) {
EnumerationExample obj = new EnumerationExample();
obj.testMethod();
}
}실행 결과
Value of constants: Mango Banana Orange Grapes Thursday Apple
정리
- 자바의 열거형은 이름 있는 상수들의 그룹을 표현합니다.
- 열거형은 클래스 내부에는 정의 가능하지만, 메소드 내부(지역) 정의는 허용되지 않습니다.
- 메소드에서 열거형 상수를 사용하려면 클래스 레벨에 열거형을 선언하고
values()메소드로 접근하는 것이 올바른 방법입니다.