Java 중복 없이 난수 생성 특정 범위의 난수(Random Number)를 중복없이 생성해야 할 상황에 간편하게 구현을 할 수 있는 방법을 알아보게 되면서 공유하고 한다. 해결방법 ThreadLocalRandom 사용 자바 8 이후로 Random클래스의 init() 메서드를 사용하여 distinct 옵션과 limit 옵션을 정한 IntStream을 얻을 수 있게 되었다. ThreadLocalRandom.current().ints(0, 100).distinct().limit(5).forEach(System.out::println); Collections.shuffle() 사용 list에 담긴 특정 범위의 수 들을 Collection.shuffle() 메서드를 사용하여 Random 하게 섞을 수 있습니다...
JVM 이해하기 자바 JVM, JDK, JRE JVM (Java Virtual Machine) 자바 가상 머신 자바 바이트 코드(.class 파일)를 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행함 JVM 스펙(링크)은 정해져 있고 이에 맞춘 구현체(JVM 밴더)는 다양하게 존재함 (오라클, 아마존, Azul, 등) 플랫폼에 종속적임 실행시 네이티브 코드로 변경을 하게 되는데 이를 OS에 맞추어 실행해야 되기 때문 JRE (Java Runtime Environment) 자바 애플리케이션을 실행하기 위한 최소한의 구성 (JVM + 라이브러리) JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있음 오라클은 자바 11부터는 JDK만 제공하며..
들어가며 배열을 List로 변환하기 위해 Arrays.asList() 를 사용하여 remove() 메서들 사용하던 중 java.lang.UnsupportedOperationException: remove이라는 에러가 발생하였다. 이슈가 발생한 원인에 대해서 알아보고자 한다. 문제의 원인 Arrays.asList()이 반환하는 값은 고정 크기의 List를 반환하기 때문이다. API를 참고해보면 Arrays.asList: Returns a fixed-size list backed by the specified array. 즉, Arrays.asList()로 반환된 List는 구조를 변경할 수 없는 불변 List라는 것이다. 해결 방법 만약 Arrays.asList() 반환된 List의 구조를 변경하고 싶다면..
들어가며 Gson을 사용하여 ZonedDateTime 객체를 Serialize/Deserialize 하는 경우가 있다. public void test() { String json = new GsonBuilder().create().toJson(ZonedDateTime.now()); ZonedDateTime dateTime = new GsonBuilder().create().fromJson(json, ZonedDateTime.class); } 위와 같이 기본 세팅으로 실행할 경우 오류가 발생한다. java.lang.RuntimeException: Failed to invoke java.time.ZoneId() with no args 이에 대한 해결방법을 공유하고자 한다. ※Gson 사용법은 아래 이전 글을..
들어가며 기존에 Apache Commons 라이브러리를 통해서 Zip 압축 기능을 구현했는데 파일을 각각 ZipArchiveEntry로 추가해줘야 하는 방식이었다. public long compressZip(List fileList, File targetFile) throws IOException { try (ZipArchiveOutputStream zos = new ZipArchiveOutputStream(new FileOutputStream(targetFile))) { int readSize; byte[] buf = new byte[BUFFER_SIZE]; for (File file : fileList) { ZipArchiveEntry ze = new ZipArchiveEntry(file.getNam..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/Mo96P/btqB1HDCi2b/PE7tbN6RSgHhlBN6ycuwxk/img.png)
들어가며 Java를 사용하여 문자메시지 발송 기능을 구현하는 방법을 알아보겠습니다. 구현 방법 쿨 엠에스 API 쿨 엠에스 API는 문자메시지 발송 서비스를 REAT API를 통하여 연동할 수 있는 상용 서비스 입니다. 유료 서비스이며 회원가입시 300포인트를 주는데 일반 문자의 경우 1개당 20원 입니다. 테스트 용도로 사용할 수 있으며 필요한 경우 금액을 충전해서 사용가능 개발환경 세팅 1. SDK 적용 SDK를 별도로 제공하고 있어서 SDK를 적용해보겠습니다. 사이트에서 사용하고 있는 Build 방법에 따라서 SDK를 적용해줍니다. 필자는 gradle을 사용하고 있기에 gradle로 적용함 dependencies { testCompile group: 'junit', name: 'junit', ver..
들어가며 Linchart를 사용하면서 전시해야 할 값(series)의 수가 너무 많아서 UI성능이 느려지는 이슈가 발생했다. 해결 방법 Series-Reducer 사용 series-reducer는 Chart 전시 값(series)이 많을 때 series개수를 줄여줌 Ramar-Douglas-Peucker 알고리즘을 통해서 series개수를 줄여준다고 함 예제 코드 List graphPointList = new ArrayList(); for () { graphPointList.add(new Point(x, y)); } final double epsilon = 0.01; // 0.01은 series-reduce 웹페이지에 예제로 나와있는 값임. epsilon이 작을수록 연산량이 많아짐 & 그래프가 디테일해 ..
들어가며 List에 있는 Item들을 대상으로 고유한 ID별로 합계를 구해야 하는 상황이 발생했다. 문제 상황 id와 duration을 가지는 MyClass가 있고 MyClass List을 받아 id별 duration의 합을 가지는 Map을 반환해야 한다. class MyClass { public String id; public Float duration; } private Map sum(List list) { return ???? } 해결방법 일단 코드부터 보자면 아래와 같다. private Map sum(List list) { return list.stream().collect(Collectors.toMap(e -> e.id, e -> e.duration, Float::sum)); } 좀더 자세하게 ..
- Total
- Today
- Yesterday
- 방통대 과제물
- 자전거 여행
- 일본여행
- 일본 자전거 여행
- 일본 배낭여행
- JavaFX
- 이펙티브
- TableView
- 스프링부트
- JavaFX Table View
- 이펙티브 자바
- 텐트
- git
- JavaFX 종료
- windows
- JavaFX 테이블뷰
- 배낭 여행
- effective java
- java
- 자전거
- 이펙티브자바
- intelij
- 인텔리제이
- Java UI
- 일본 여행
- effectivejava
- 배낭여행
- 자바
- JavaFX Window Close
- springboot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |