본문 바로가기
  • 구름빵의 개발 블로그
Front-End/JavaScript,TypeScript

[JavaScript] Math를 사용한 난수 생성

by 은빛구름빵 2025. 9. 8.

개요

생각보다 서비스를 개발하며 특정 범위 내의 난수를 생성하는 경우가 많다.

누구나 다 아는 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()도 마찬가지이기 때문에 차이가 없다.

 

결론

위와 같은 방법으로 특정 범위의 랜덤한 값을 만들 수 있다.

수학적인 로직이 요구되어서 처음에는 이해하기 힘들 수 있으나 한 번 이해하고 적용하면 앞으로 대부분의 난수를 요구하는 로직에서 위와 같이 사용될 것이기 때문에 문제 없다.