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 클래스를 사용하여 랜덤의 방향을 생성할 수 있습니다.
RandomEnumGenerator reg = new RandomEnumGenerator(Direction.class);
Direction direction = (Direction) reg.randomEnum();
여기에서는 이전 섹션의 Direction enum 클래스를 사용하고 있습니다. RandomEnumGenerator 는 이 클래스를 받아들이고 방향 객체는 Direction 클래스 의 상수 값 중 하나를 참조합니다 .
4. 결론
이 사용방법(예제)에서는 enum 에서 랜덤의 값을 가져오는 방법을 배웠습니다 . 이를 수행하는 두 가지 방법을 다루었습니다. 첫째, enum 클래스 내 에서 메서드가 선언 된 enum 클래스로 엄격하게 제한된 랜덤의 값을 생성하는 정적 메서드 를 사용합니다. 또한 상수 값을 캐싱하여 성능을 개선할 수 있는 방법을 확인했습니다. 마지막으로 랜덤의 값을 얻기 위해 모든 유형의 열거형 을 허용하는 클래스를 사용하여 제네릭을 활용 합니다.
항상 그렇듯이 이 기사의 전체 코드 샘플은 GitHub 에서 찾을 수 있습니다 .