ㅇ.ㅇ
[Java] Random 4 종류 본문
반응형
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();
반응형
'Today I Learned' 카테고리의 다른 글
[Git] Worktree (1) | 2025.07.13 |
---|---|
[Security] HttpFirewall (1) | 2025.07.11 |
[Tomcat] Tomcat 실행 흐름 (feat.setenv.bat 파일) (0) | 2025.07.04 |
[Spring] redirect 시, URL에 파라미터 붙는 이유 (0) | 2025.06.28 |
[Linux] Rich Rules - service name (0) | 2025.06.27 |