Recent Posts
Recent Comments
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
관리 메뉴

ㅇ.ㅇ

[Java] Random 4 종류 본문

Today I Learned

[Java] Random 4 종류

dbs_ 2025. 7. 5. 11:45
반응형

 

 

Random 종류

1. java.util.Random

  • JDK 1.0부터 제공된 가장 기본적인 난수 생성기
  • 특정한 규칙에 따라 가짜 난수 생성 - 완전한 진짜 랜덤은 아니고, 시드가 같으면 항상 같은 숫자 나옴
  • 여러 스레드가 동시에 Random 객체를 사용할 경우, 내부에서 사용하는 값인 AtomicLong을 건드리면서 충돌 발생. 그로 인해 속도가 느려질 수 있고, 예상치 못한 문제가 생길 수 있
Random rnd = new Random();
int r = rnd.nextInt(100); // 0~99

 

2. java.util.concurrent.ThreadLocalRandom

  • JDK 7부터 도입 (thread-safe)
  • 스레드마다 따로 작동하는 랜덤 인스턴스를 자동으로 사용 - 그러므로 여러 스레드가 동시에 사용해도 안전하다
  • 내부적으로 공유 리소스를 쓰지 않아서 Random 보다 성능이 좋고, 병목이 없다
  • 따로 new 해서 만들 필요 없이 static 방식으로 사용
int r = ThreadLocalRandom.current().nextInt(100);

 

3. java.util.SplittableRandom

  • JDK 8부터 도입
  • 이름 그대로, 랜덤 인스턴스를 쪼개서 병렬로 사용할 수 있는 구조
  • 병렬 스트림(parallel stream), fork, join 같은 동시처리 작업에 최적화
  • thread-safe 하지는 않는다 - 대신, split() 통해 각 스레드가 별도의 랜덤 인스턴스를 만들도록 하면 된다
SplittableRandom sr = new SplittableRandom();
int r = sr.nextInt(100);

 

4. java.security.SecureRandom

  • JDK 1.1부터 도입
  • 보안용 랜덤 클래스
  • 이름 그대로, 보안(Secure)이 필요한 상황을 위해 만들어짐
  • CSPRNG 라는 암호화적 알고리즘을 사용함
  • 운영 체제에서 제공하는 엔트로피 소스를 활용하여 난수 생성
  • 대신 생성 속도가 느리다
SecureRandom sr = new SecureRandom();
int r = sr.nextInt(100);

-

SecureRandom sr2 = SecureRandom.getInstanceStrong();

 

반응형