TypeScript:
난수 생성

방법:

TypeScript에서는 전역 Math 객체를 사용하여 난수를 생성할 수 있습니다. 아래는 다양한 요구 사항에 대한 난수를 생성하는 방법을 보여주는 실용적인 예시들입니다.

기본 난수 생성하기

0(포함)과 1(미포함) 사이의 기본 무작위 소수를 생성하려면, Math.random()을 사용합니다. 이는 추가적인 조작을 요구하지 않습니다:

const randomNumber = Math.random();
console.log(randomNumber);

이는 0.8995452185604771과 같은 값을 출력할 수 있습니다.

두 값 사이의 난수 정수 생성하기

특정 두 값 사이의 정수가 필요할 때는 Math.random()과 일부 산술을 포함시킵니다:

function getRandomInt(min: number, max: number): number {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

const randomInt = getRandomInt(1, 10);
console.log(randomInt);

이는 1과 10 사이의 정수 값을 출력할 수 있으며, 예를 들어 7과 같습니다.

고유 식별자 생성하기

난수는 다른 방법들과 결합되어 고유 식별자를 생성할 수 있으며, 예를 들면 간단한 UUID 생성기 스니펫입니다:

function generateUUID(): string {
    return 'xxxxyxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
        const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}

const uuid = generateUUID();
console.log(uuid);

이는 110e8400-e29b-41d4-a716-446655440000과 같은 UUID를 닮은 문자열을 생성합니다.

깊이 있게 보기

JavaScript 및 따라서 TypeScript에서 난수를 생성하는 주요 방법인 Math.random()은 의사 난수 생성기(PRNG)에 의존합니다. 결과가 무작위처럼 보일 수 있지만, 초기 시드 값에 기반한 결정론적 알고리즘에 의해 생성된다는 점을 유념하는 것이 중요합니다. 따라서, Math.random()에 의해 생성된 숫자들은 진정으로 무작위가 아니며, 암호화 목적으로 사용되어서는 안 됩니다.

암호학적으로 안전한 난수를 위해, Web Crypto API는 웹 크립토 표준을 지원하는 환경, 포함한 현대 브라우저와 Node.js( crypto 모듈을 통해)에서 접근 가능한 crypto.getRandomValues()를 제공합니다. 여기 TypeScript에서 범위 내에서 안전한 난수를 생성하는 용도로 사용되는 간단한 예가 있습니다:

function secureRandom(min: number, max: number): number {
    const array = new Uint32Array(1);
    window.crypto.getRandomValues(array);
    return min + (array[0] % (max - min + 1));
}

const secureRandNum = secureRandom(1, 100);
console.log(secureRandNum);

이 방법은 더 강력한 난수성을 제공하며 보안에 민감한 애플리케이션에 더 적합합니다. 그러나 또한 더 많은 자원을 소모하며 간단한 시뮬레이션 또는 비판적이지 않은 난수 값 생성과 같은 덜 중요한 작업에는 필요하지 않을 수 있습니다.