Kotlin은 난수를 생성하기 위한 다양한 방법을 제공합니다. 이 글에서는 대표적인 세 가지 방법을 예제 코드와 함께 살펴보고, 각 방법의 특징과 어떤 상황에서 활용하면 좋은지까지 정리해 드립니다.
방법 1 – Random 클래스 사용하기
Random()은 주어진 조건에 따라 난수를 생성하는 추상 클래스입니다. kotlin.random.Random을 임포트하면 바로 사용할 수 있습니다.
Kotlin 공식 문서에 따르면, 컴패니언 객체인 Random.Default가 Random 클래스의 기본 인스턴스 역할을 합니다. 아래 예제에서는 nextInt()를 사용해 5개의 정수 난수(0~29)로 이루어진 리스트를 생성합니다.
예제 코드
import kotlin.random.Random
fun main() {
val myRandomValues = List(5) { Random.nextInt(0, 30) }
// 실행할 때마다 새로운 난수 시퀀스가 출력됩니다
println(myRandomValues)
}
출력 결과
실행 결과는 다음과 같습니다. 난수 특성상 실행할 때마다 다른 값이 출력될 수 있습니다.
[8, 21, 16, 29, 16]
방법 2 – random() 함수 사용하기
Kotlin 표준 라이브러리는 random() 함수도 제공합니다. 숫자 범위(IntRange)에 이 함수를 호출하면 해당 범위 안에서 임의의 Int 값을 반환합니다. 별도의 임포트 없이 한 줄로 간결하게 사용할 수 있다는 것이 큰 장점입니다.
예제 코드
fun main() {
// 0부터 10 사이의 난수를 생성합니다
println((0..10).random())
}
출력 결과
실행하면 다음과 같은 결과가 출력됩니다.
0
방법 3 – shuffled() 함수 사용하기
shuffled()는 컬렉션의 요소 순서를 무작위로 섞는 함수입니다. 숫자 범위에 적용한 뒤 마지막 요소를 가져오면 사실상 난수 하나를 뽑는 것과 같은 효과를 얻을 수 있습니다. 아래 예제는 0부터 100 사이의 난수를 생성합니다.
예제 코드
fun main() {
val random1 = (0..100).shuffled().last()
println(random1)
}
출력 결과
실행하면 다음과 같은 결과가 출력됩니다. 역시 난수 특성상 환경마다 다른 값이 나올 수 있습니다.
42
어떤 방법을 선택해야 할까?
세 가지 방법 모두 난수를 생성한다는 점에서는 동일하지만, 상황에 따라 적합한 선택이 달라집니다.
- Random 클래스: 시드(seed) 지정이나 재현 가능한 난수 생성처럼 세밀한 제어가 필요할 때 유용합니다.
- random(): 임포트 없이 간단히 난수 하나만 필요할 때 가장 깔끔하고 직관적인 선택입니다.
- shuffled(): 범위 전체를 무작위로 뒤섞은 결과가 필요하거나 중복 없는 순열을 만들 때 활용하기 좋습니다. 단, 전체 범위를 메모리에 생성하므로 범위가 클 경우 성능에 유의해야 합니다.
간단한 용도라면 random(), 성능과 세밀한 제어가 중요하다면 Random 클래스를 사용하는 것을 권장합니다. 각 방법의 특성을 이해하고 프로젝트에 맞는 도구를 선택해 보세요.