C# 문법은 듣는 도중 튜터님께서 Random.Range가 아닌 Random().Next를 사용하시는걸 보았다.
간단한 가위 바위 보 예제를 보여주시며 Next를 사용하셨는데 처음에는 Next라는 이름때문에 자동으로 계속 랜덤 값을 부여하는 함수인가? 생각도 했다. 물론 아니였지만, Range가 있는데 왜 Next를 사용할까 궁금해졌다.
Random.Range 함수는 유니티 엔진에서 지원하는 함수이고 Random().Next는 C#에서 지원하는 함수라는 차이점이 있었다.
즉 Range는 유니티 환경이 아니면 사용할 수 없다는 점이 가장 큰 차이였다.
그 외 기능적인 측면에서도 두드러지는 차이점이 있었는데 Next함수는 정수밖에 사용이 안된다는 점이였다.
Range함수는 정수와 실수 모두 사용 가능해 범용성이 더 넓었다.
그렇다면 한가지 더 궁금증이 생긴다. Range 함수에서 정수와 실수로 나뉘어져 있는 이유가 뭘까?
정수를 가지는 Range함수는 Max value가 포함되지 않고 실수일때만 포함된다.
이는 사용자의 목적에 따라 사용할 수 있게 만들었기 떄문인데,
정수의 경우 배열의 크기 등으로 사용할때 주로 사용하기 좋다.
Random.Range(0, arry.Length); 사용한다 했을때 배열의 크기가 3일때 해당 함수는 0,1,2 까지 3개의 값을 가지게 되어 더욱 직관적인 표현이 가능하다.
실수의 경우는 직접적인 난수를 구해야하기 때문에 최대값이 포함되지 않는다면 범위를 정확히 측정할 수 없기 때문이다.
간단한 예로 0.0f~ 1.0f 사이의 범위를 찾는다 했을때 1.0f를 포함시키지 않는다고 하면 1.0f를 포함시키기 위해서 1.1f 를 사용한다 하자. 그러면 1.0f~1.099999999999999..... 사이의 실수도 포함되기 때문에 이는 정확한 값을 가질수 없게된다. 그렇기 때문에 실수를 사용하는 Range는 Max value를 포함하게 되는 것이다.
'Unity > 문법' 카테고리의 다른 글
| [Unity] 상속 금지 클래스 (sealed) (0) | 2025.09.22 |
|---|---|
| [Unity]LinQ - FirstOrDefault, Where, Select 차이 (0) | 2025.04.28 |
| [Unity] if문과 switch case 문 (0) | 2025.04.14 |
| [Unity] 람다식의 이해 (0) | 2025.04.09 |