• 참조

    • 블로그: https://offbyone.tistory.com/237
  • Java에서의 난수 발생 2가지 방법

    • Math 클래스의 정적 메서드 random()을 사용하는 방법
    • Random 클래스를 사용하는 방법
    • 여기서 발생하는 난수는 **의사 난수(Pseudo-Random-Number)**로 난수에 가까운 난수 → 즉, 완전한 난수는 아니며 특정한 규칙을 가짐
  • Seed

    • 난수를 발생하는데 기준이 되는 값
    • 예를 들어 Random 객체를 똑같은 시드로 생성하는 경우 난수 값이 동일한 순서로 생성
    • 대부분의 경우는 현재 시간등의 변하는 값을 Seed로 하여 항상 다른 난수 사용하도록 함
  • Math.random()

    • java.lang 패키지에 속하므로 별도의 import를 요구하지 않음

    • random()메서드는 정적 메서드로 객체를 생성하지 않고 사용 가능

    • 해당 메서드는 현재 시간을 seed로 활용하여 0.0이상 1.0 미만의 난수를 생성

    • 예시 코드

      for(int i = 0; i < 5; i++) {
      	double random = Math.random();
      	System.out.println(random);
      	// 0~9 정수 난수 생성
      	// System.out.println((int) (Math.random() * 10));
      }
      
      // 출력
      // 0.39974769230069795
      // 0.5757573077185362
      // 0.1676384272037713
      // 0.17824839454077657
      // 0.23222737754673928
      
  • Random 클래스

    • 기본 생성자를 활용하면 현재 시간을 seed로 가짐
    • seed를 지정할 수 있는데 인자로는 long 타입의 인자를 받음
    • 클래스를 생성한 후 seed를 변경하기 위해서는 setSeed() 메서드 활용
    • 난수 발생 메서드
      • boolean nextBoolean() : 균일한 분포의 boolean 형 난수 발생
      • int nextInt() : 균일한 분포의 int 형 난수 발생(int 전 범위에서 난수가 발생합니다.)
      • long nextLong() : 균일한 분포의 long형 난수 발생(long 점 범위에서 난수가 발생합니다.)
      • int nextInt(int n) : 균일한 분포의 0이상 n 미만의 int형 난수 발생
      • float nextFloat() : 균일한 분포의 0.0이상 1.0 미만의 float형 난수 발생
      • double nextDouble() : 균일한 분포의 0.0이상 1.0 미만의 double형 난수 발생
      • double nextGaussian() : 정규 분포의 난수를 발생합니다.(평균이 0이고, 표준편차가 1인 분포 입니다.)