C#에서 리스트에 저장된 여러 요소 중 하나를 무작위(랜덤)로 선택하는 것은 게임 개발, 데이터 샘플링, 추첨 로직 등 다양한 상황에서 자주 사용되는 기능입니다. 이 글에서는 Random 클래스를 활용해 리스트에서 임의의 요소를 간단하게 가져오는 방법을 알아보겠습니다.
핵심 원리
무작위 요소를 선택하는 원리는 매우 간단합니다. Random.Next() 메서드로 0부터 (리스트 개수 − 1) 사이의 임의의 인덱스를 생성한 뒤, 해당 인덱스로 리스트에 접근하면 됩니다.
먼저 문자열 리스트를 하나 생성해 보겠습니다.
var list = new List<string>{ "one", "two", "three", "four" };
다음으로 리스트의 요소 개수를 기준으로 무작위 인덱스를 만들고, 그 인덱스에 해당하는 요소를 출력합니다.
int index = random.Next(list.Count); Console.WriteLine(list[index]);
random.Next(list.Count)는 0 이상 list.Count 미만의 정수를 반환하므로, 항상 유효한 인덱스 범위 안에서 값이 선택됩니다. 따라서 IndexOutOfRangeException 같은 오류가 발생하지 않습니다.
전체 예제 코드
C# 리스트에서 무작위 요소를 선택하려면 다음 코드를 실행해 보세요.
using System;
using System.Collections.Generic;
namespace Demo {
class Program {
static void Main(string[] args) {
var random = new Random();
var list = new List<string>{ "one", "two", "three", "four" };
int index = random.Next(list.Count);
Console.WriteLine(list[index]);
}
}
}
실행 결과
three
프로그램을 실행할 때마다 결과는 달라질 수 있습니다. 위 예제에서는 one, two, three, four 중 하나가 매번 무작위로 출력됩니다.
응용: 확장 메서드로 재사용성 높이기
여러 곳에서 무작위 선택 기능을 자주 사용한다면, 확장 메서드(Extension Method)로 만들어 두면 더욱 편리합니다.
using System;
using System.Collections.Generic;
public static class ListExtensions {
private static readonly Random random = new Random();
public static T GetRandom<T>(this List<T> list) {
if (list == null || list.Count == 0)
throw new ArgumentException("리스트가 비어 있거나 null입니다.");
return list[random.Next(list.Count)];
}
}
// 사용 예시
var item = list.GetRandom();
이처럼 제네릭 확장 메서드를 활용하면 어떤 타입의 리스트든 동일한 방식으로 무작위 요소를 가져올 수 있어 코드의 재사용성과 가독성이 크게 향상됩니다.