1. 개요

이 예제에서는 enum 에서 랜덤의 값을 생성하는 방법을 배웁니다 .

2. 정적 방법 을 사용한 임의 의 열거형

먼저 특정 열거형 집합 에서 임의로 생성된 값을 반환하는 정적 함수를 만듭니다. 열거형 값은 상수 집합을 나타냅니다. 그러나 여전히 enum 클래스 본문 내에서 정적 메서드를 선언할 수 있습니다 . 정적 메서드를 헬퍼로 활용 하여 랜덤의 열거형 값을 생성합니다.

열거형 클래스 본문 내부에 정 적이고 열거형을 반환하는 메서드를 선언 합니다. 이 메서드는 Random 객체 에서 nextInt() 를 호출하고 이 메서드의 이름을 randomDirection() 으로 지정합니다 .

public enum Direction {
    EAST, WEST, SOUTH, NORTH;
    
    private static final Random PRNG = new Random();

    public static Direction randomDirection()  {
        Direction[] directions = values();
        return directions[PRNG.nextInt(directions.length)];
    }
}

randomDirection() 내부 에서 정수 인수를 사용하여 nextInt() 메서드를 호출합니다 . nextInt() 메서드 는 방향 배열 에 액세스하기 위해 난수를 반환합니다 . 따라서 nextInt() 에 바인딩된 인수를 전달하여 정수가 배열 범위를 벗어나지 않도록 해야 합니다 . 범위 인수는 배열의 크기를 초과하지 않을 것임을 알고 있는 방향의 총 수입니다 .

또한  values() 메서드는 randomDirection() 메서드가 호출 될 때마다 열거형 값 의 복사본을 만듭니다 . 임의 인덱스를 생성한 후 액세스하는 최종 멤버 변수 List을 생성하여 성능을 향상시킬 수 있습니다.

private static final Direction[] directions = values();

이제 randomDirection() 메서드는 다음과 같습니다.

public static Direction randomDirection() { 
    return directions[PRNG.nextInt(directions.length)]; 
}

마지막으로 메서드를 호출하여 랜덤의 방향 을 생성할 수 있습니다.

Direction direction = Direction.randomDirection();

3. 제네릭을 사용한 임의 의 열거형 값

마찬가지로 제네릭을 사용하여 랜덤의 열거형 값을 생성할 수 있습니다. 제네릭을 사용 하여 랜덤의 값을 생성하기 위해  모든 유형의 열거형 데이터를 허용하는 클래스를 만듭니다.

public class RandomEnumGenerator<T extends Enum<T>> {
    private static final Random PRNG = new Random();
    private final T[] values;

    public RandomEnumGenerator(Class<T> e) {
        values = e.getEnumConstants();
    }

    public T randomEnum() {
        return values[PRNG.nextInt(values.length)];
    }
}

randomEnum() 메서드가 이전 예제 의 randomDirection() 메서드와 어떻게 유사한지 확인하십시오. 차이점은 RandomEnumGenerator 클래스에는 상수 값을 가져올 enum 유형을 예상하는 생성자가 있다는 것입니다.

다음과 같이 RandomEnumGenerator 클래스를 사용하여 랜덤의 방향을 생성할 수 있습니다.

AdChoices
광고
RandomEnumGenerator reg = new RandomEnumGenerator(Direction.class);
Direction direction = (Direction) reg.randomEnum();

여기에서는 이전 섹션의 Direction enum 클래스를 사용하고 있습니다. RandomEnumGenerator 는 이 클래스를 받아들이고 방향 객체는 Direction 클래스 의 상수 값 중 하나를 참조합니다 .

4. 결론

이 사용방법(예제)에서는 enum 에서 랜덤의 값을 가져오는 방법을 배웠습니다 . 이를 수행하는 두 가지 방법을 다루었습니다. 첫째, enum 클래스 내 에서 메서드가 선언 된 enum 클래스로 엄격하게 제한된 랜덤의 값을 생성하는 정적 메서드 를 사용합니다. 또한 상수 값을 캐싱하여 성능을 개선할 수 있는 방법을 확인했습니다. 마지막으로 랜덤의 값을 얻기 위해 모든 유형의 열거형 을 허용하는 클래스를 사용하여 제네릭을 활용 합니다.

항상 그렇듯이 이 기사의 전체 코드 샘플은 GitHub 에서 찾을 수 있습니다 .

Generic footer banner