Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) 메소드 내부에 열거형(Enum)을 정의할 수 있을까?

자바에서 열거형(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() 메소드로 접근하는 것이 올바른 방법입니다.