티스토리 뷰
랜덤값을 구해오는 라이브러리
- java.util.Random: nextInt() % bound;
java1.0
- java.util.Random: nextInt(int bount);
java1.2
- java.util.concurrent.ThreadLocalRandom
java1.7
- java.util.SplittableRandom
java1.8
- java.security.SecureRandom
java1.1
// 59-1. Random.nextInt() % bound 방식의 문제점
public class Item59 {
static Random random = new Random();
static int random(int n) {
return Math.abs(random.nextInt()) % n;
}
public static void main(String[] args) {
int n = 2 * (Integer.MAX_VALUE / 3);
int low = 0;
for (int i = 0; i < 1_000_000; i++) {
if (random(n) < n/2) {
low++;
}
}
System.out.println(low);
}
}
- n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복 된다.
- n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다.
- 지정한 범위 '바깥'의 수가 튀어나올 수 있다.
// 랜덤값 구하기
int bound = 1_000_000;
int r0 = new Random().nextInt(bound); // ThreadLocalRandom 으로 대체
int r1 = ThreadLocalRandom.current().nextInt();
int r2 = new SplittableRandom().nextInt(bound); // 포크-조인 풀이나 병렬 스트림에서 사용
int r3 = new SecureRandom().nextInt(bound); // 좀 더 보안적인 난수가 필요할때
표준 라이브러리를 쓰는 이점
- 핵심적인 일과 크게 관련 없는 문제를 해결하느라 시간을 허비하지 않아도 된다.
- 따로 노력하지 않아도 성능이 지속해서 개선된다.
- 기능이 점점 많아진다.
- 작성한 코드가 많은 사람에게 낯익은 코드가 된다.
자바 프로그래머라면 적어도 알아야 할 패키지와 라이브러리
근데도 많은 프로그래머들은 라이브러리에 그런 기능이 있는지 모르기 때문에 직접 구현해서 쓰고있다.
메이저 릴리스 마다 많은 기능이 추가 되는데 한 번쯤 읽어볼 만하다.
- java.lang
- java.util
- java.io
- 컬렉션 프레임워크
- 스트림 라이브러리
- java.util.concurrent 의 동시성 기능
기능 구현 전에 라이브러리를 찾아보자.
- 구현 전에 먼저 라이브러리를 사용하려고 해보자.
- 표준 라이브러리에서 제공하는지 찾아보자.
- 서브파티 라이브러리에서 제공하는지 찾아보자. (구글 구아바, 아파치 커먼즈)
- 그럼에도 없다면 직접 구현하자.
결론
- 바퀴를 다시 발명하려 하지 말자.
- 아주 특별한 나만의 기능이 아니라면 이미 누군가가 구현해 놓았을 가능성이 크다.
반응형
'책 > 이펙티브자바' 카테고리의 다른 글
아이템 51. 메서드 시그니처를 신중히 설계하라 (0) | 2021.09.16 |
---|---|
아이템 60. 정확한 답이 필요하다면 float와 double은 피하라 (0) | 2021.09.15 |
아이템 57. 지역변수의 범위를 최소화하라 (0) | 2021.09.15 |
아이템29. 이왕이면 제네릭 타입으로 만들라 (0) | 2021.09.01 |
아이템28. 배열보다는 리스트를 사용하라 (0) | 2021.09.01 |
링크
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 집 구하기
- js array
- 드림코딩
- HTTP 완벽가이드
- 킹수빈닷컴
- JS 딥다이브
- 모던자바스크립트
- 이펙티브자바 스터디
- 백준
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 김영한 http
- 이펙티브자바 아이템60
- Spring Security
- 프로그래머스
- JPA 연관관계 매핑
- dreamcoding
- 이펙티브자바
- 이펙티브자바 아이템59
- 백기선 스터디
- GCP
- js api
- REST API
- 프로그래머스 SQL
- 패스트캠퍼스 컴퓨터공학 완주반
- 김영한 JPA
- js promise
- HTTP 완벽 가이드
- BOJ
- http
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함