JavaScript Random
JavaScript Random: 난수 생성의 이해와 활용
JavaScript에서 **난수(Random Number)**는 Math.random()
메서드를 사용해 생성할 수 있습니다. 이 메서드는 0
이상 1 미만의 부동 소수점 값을 반환합니다. 이를 활용해 다양한 범위에서 난수를 생성하고, 그 난수를 특정 용도에 맞게 사용할 수 있습니다.
이 가이드는 JavaScript에서 난수를 생성하는 방법과, 특정 범위의 정수나 소수를 생성하는 다양한 방법을 다룹니다.
1. 기본 Math.random()
메서드
Math.random()
은 0 이상 1 미만의 **난수(소수점)**를 반환합니다.
const randomNum = Math.random();
console.log(randomNum); // 예시 출력: 0.3484527485 (0 이상 1 미만)
2. 특정 범위의 난수 생성
Math.random()
은 기본적으로 0 이상 1 미만의 값을 반환하기 때문에, 이를 응용하여 다양한 범위의 난수를 생성할 수 있습니다.
2.1. 0 이상 N 미만의 난수 생성
Math.random()
에 N을 곱하면 0 이상 N 미만의 난수를 생성할 수 있습니다.
// 0 이상 10 미만의 난수
const randomNum = Math.random() * 10;
console.log(randomNum); // 예시 출력: 4.8475 (0 이상 10 미만)
2.2. 1 이상 N 이하의 정수 난수 생성
1부터 N 사이의 정수 난수를 생성하려면 Math.random()
에 N을 곱한 후 **내림(Math.floor()
)**을 사용합니다.
// 1 이상 10 이하의 정수 난수
const randomInt = Math.floor(Math.random() * 10) + 1;
console.log(randomInt); // 예시 출력: 7 (1 이상 10 이하)
2.3. A 이상 B 이하의 정수 난수 생성
A부터 B 사이의 정수 난수를 생성하려면, (B - A + 1)
범위를 설정하고, 그 범위에 A를 더합니다.
// 5 이상 15 이하의 정수 난수
const min = 5;
const max = 15;
const randomInt = Math.floor(Math.random() * (max - min + 1)) + min;
console.log(randomInt); // 예시 출력: 8 (5 이상 15 이하)
3. 소수 난수 생성
Math.random()
이 반환하는 값은 0과 1 사이의 부동 소수점 값이므로, 이를 활용해 원하는 소수 자릿수의 난수를 생성할 수 있습니다.
3.1. 특정 범위의 소수 난수
A부터 B 사이의 소수 난수를 생성하려면, (B - A)
에 Math.random()
을 곱한 후 A를 더하면 됩니다.
// 1.5 이상 5.5 미만의 소수 난수
const min = 1.5;
const max = 5.5;
const randomFloat = Math.random() * (max - min) + min;
console.log(randomFloat); // 예시 출력: 3.273 (1.5 이상 5.5 미만)
3.2. 소수점 이하 N자리까지 표시
소수점 이하 N자리까지 표시하려면 toFixed()
메서드를 사용할 수 있습니다. 이 메서드는 문자열을 반환하므로, 다시 숫자로 변환하려면 parseFloat()
을
사용해야 합니다.
// 0 이상 1 미만의 소수점 이하 3자리 난수
const randomFloat = Math.random().toFixed(3);
console.log(randomFloat); // 예시 출력: 0.528
// 0 이상 1 미만의 소수점 이하 3자리 난수를 숫자로 변환
const randomFloatNumber = parseFloat(Math.random().toFixed(3));
console.log(randomFloatNumber); // 예시 출력: 0.528
4. 배열에서 무작위 요소 선택
배열에서 임의의 요소를 선택하려면 배열의 길이에 따라 인덱스를 랜덤하게 생성하면 됩니다.
const fruits = ["apple", "banana", "cherry", "orange", "grape"];
// 배열에서 무작위 요소 선택
const randomFruit = fruits[Math.floor(Math.random() * fruits.length)];
console.log(randomFruit); // 예시 출력: "banana"
5. 무작위로 배열 섞기 (랜덤 셔플)
배열을 무작위로 섞는 방법 중 하나는 Fisher-Yates 셔플 알고리즘을 사용하는 것입니다.
function shuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]]; // 배열 요소 교환
}
return array;
}
const numbers = [1, 2, 3, 4, 5];
console.log(shuffleArray(numbers)); // 예시 출력: [3, 5, 1, 4, 2] (무작위 순서)
6. 무작위로 Boolean 값 생성
참(true) 또는 **거짓(false)**을 무작위로 생성하려면, Math.random()
을 이용해 0.5 기준으로 나누어
반환할 수 있습니다.
const randomBoolean = Math.random() >= 0.5;
console.log(randomBoolean); // 예시 출력: true 또는 false
7. 날짜 기반 난수 생성
Date
객체를 사용해 현재 시간을 기준으로 난수를 생성할 수도 있습니다. 예를 들어, 타임스탬프를 활용해 임의의 값을 생성하는 방법입니다.
const randomSeed = Date.now() % 100; // 현재 타임스탬프의 마지막 두 자리
console.log(randomSeed); // 예시 출력: 57 (현재 시간에 따라 다름)
요약
Math.random()
: 0 이상 1 미만의 부동 소수점 난수를 반환하는 메서드입니다.- 특정 범위 난수 생성:
Math.floor()
또는Math.ceil()
을 사용해 정수 또는 소수 범위의 난수를 생성할 수 있습니다. - 배열에서 무작위 요소 선택: 배열의 길이를 사용해 무작위 인덱스를 생성하고 배열에서 요소를 선택할 수 있습니다.
- 랜덤 셔플: Fisher-Yates 알고리즘을 사용해 배열을 무작위로 섞을 수 있습니다.
- Boolean 값 생성:
Math.random()
을 이용해 0.5 기준으로 참/거짓 값을 생성할 수 있습니다.
JavaScript에서 난수를 효과적으로 활용하면, 다양한 무작위 작업을 수행할 수 있습니다. 이 방법들을 통해 무작위 데이터 생성, 배열 셔플, 랜덤 이벤트 처리 등을 유연하게 처리할 수 있습니다.