개요
생각보다 서비스를 개발하며 특정 범위 내의 난수를 생성하는 경우가 많다.
누구나 다 아는 random() 함수를 사용할 것이며 이 random() 함수에 대해 자세한 사용법을 알아보았다.
Math.random()
Math 내장 객체의 static 함수인 random() 함수는 0~1 범위 내의 무작위 실수를 반환해준다.
개발자도 알 수 없는 임의의 난수를 생성할 수 있는 몇 안되는 방법 중 하나이다.
하지만 이 값을 받아보면 소수 몇 자리까지 나오는지 세기도 힘든 길이의 소수가 나온다.
우리는 이런 소수가 필요한 것이 아닐 가능성이 높다.
따라서, 이 값을 잘 가공해 우리가 원하는 범위의 난수를 반환하게 만들어 볼 것이다.
Math.round() / Math.floor() 활용
round()는 반올림 메서드 floor()는 내림 함수이다.
이 값을 구하기 위해 수학적 계산이 조금 요구된다.
아래는 0부터 100 사이의 범위 중 난수를 생성하는 방법이다.
// 0.7613245
const num = Math.random();
// num 값에 100을 곱하고 나온 결과를 반올림한다.
// 0.7613245 * 100 = 76.13245
// 76.13245를 반올림하면 76
// 즉, 아래와 같이 작성하면 num의 최솟값인 0, 최댓값인 1일 때
// 0 * 100 = 0, 반올림 0
// 1 * 100 = 100, 반올림 100
// 즉, 0부터 100까지의 난수 중 하나가 나오게 만들 수 있음
const roundNum = Math.round( num * 100 );
위 예제 설명에 작성했듯이 random()을 적용한 값에 원하는 값을 곱해서 범위를 지정할 수 있다.
그럼 조금 더 난이도를 높여서 n과 m 사이의 난수를 생성하는 방법을 알아보자
const num = Math.random();
const result = Math.round( num * (m-n) + n );
// 예제 10에서 50 사이의 난수 생성
// num = 0.41658
const num = Math.random();
// 0.41658 * 40 = 16.6632
// 16.6632 + 10 = 26.6632
// 26.6632 반올림 = 27
// num의 최솟값 0일 때, 0 * 40 + 10 = 10, 10의 반올림 10
// num의 최댓값 1일 때, 1 * 40 + 10 = 50, 50의 반올림 50
// 따라서, 최소 10에서 최대 50의 값을 만들 수 있음
const result = Math.round( num * 40 + 10 );
이처럼 굉장히 수학적인 계산을 통해 특정 범위를 지정할 수 있다.
floor()도 마찬가지이기 때문에 차이가 없다.
결론
위와 같은 방법으로 특정 범위의 랜덤한 값을 만들 수 있다.
수학적인 로직이 요구되어서 처음에는 이해하기 힘들 수 있으나 한 번 이해하고 적용하면 앞으로 대부분의 난수를 요구하는 로직에서 위와 같이 사용될 것이기 때문에 문제 없다.
'Front-End > JavaScript,TypeScript' 카테고리의 다른 글
| [JavaScript] Rest Parameter 활용 (0) | 2025.09.10 |
|---|---|
| [JavaScript] Event 다루기 (0) | 2025.09.09 |
| [JavaScript] Date 객체를 통한 날짜, 시간 다루기 (0) | 2025.09.08 |
| [JavaScript] 배열 객체의 활용 (0) | 2025.09.08 |
| [JavaScript] 배열을 통한 Queue, Stack 구현 (0) | 2025.09.05 |