java8

JVM/Java

[Java] Random보단 SecureRandom 를 사용하자.

🙄서론 Random을 사용하다가 소나큐브에서 Critical 버그가 발생했다. 그 후 알아본 내용을 정리해본다. 😉본론 - 에러 메세지 (번역은 구글번역을 통해 되었기 때문에 오역이 있을 수 있습니다..) "Random" objects should be reused "랜덤" 객체는 재사용되어야 한다. Random 값이 필요할 때마다 새 개체를 만드는 것은 비효율적이며 JDK에 따라 임의의 숫자가 생성되지 않을 수 있습니다. 효율성과 임의성을 높이려면 단일 Random을 만든 다음 저장하고 다시 사용하세요. Random()생성자는 별개의 값마다에 씨앗을 설정하려고 시도합니다. 그러나 시드가 무작위로 또는 균일하게 분포 될 것이라는 보장은 없습니다. 일부 JDK는 현재 시간을 시드로 사용하므로 생성 된 숫자..

JVM/Java

[Java]Collections.emptyList() vs. new instance 어떤 차이가 있을까?

🤔서론 스택오버플로우를 보다가 아하! 싶은 내용이 있길래 정리를 해본다. 리턴을 null로하는 것은 매우매우 위험한 행동이다. 그렇기에 우리는 새 인스턴스를 만들어서 리턴을 시켜줄수도 있고, 라이브러리를 통해 emptyList()를 리턴해줄수도 있다. 둘은 어떤 차이가 있을까? 😆본론 아래 두 방식의 차이를 알아보자. return Collections.emptyList(); return new ArrayList(); 일단 Collections.emptyList()가 뭔지 알면 쉽게 정리할 수 있다. public static final List emptyList() { return (List) EMPTY_LIST; } 이 메서드를 구현하면 각 호출에 대해 별도의 목록 개체를 만들 필요가 없습니다. 이 방법..

JVM/Java

[Java]for문 List를 Null 체크하는 방법

🙄서론 for문을 돌리는 List를 어디선가 받아와서 사용할 때 null인 경우가 있을수도 있기 때문에 예외처리는 필수적으로 해주어야 한다. (물론 NULL이 처음부터 발생하지 않게 해주는 것도 중요하다.) 내가 하던 방식이 비효율적으로 느껴졌고, 다른사람들은 어떻게 null 체크 하는지에 궁금증이 생겨서 알아보게 된 걸 기록해본다. 😉본론 AS-IS 기존 내가 null 체크 했던 방식들 if(productionList != null) { for (String production : productionList) { // 로직구현 } } else { // 예외처리 } if(productionList == null) { return ; // or 예외처리 } for (String production : pr..

JVM/Java

[Java] List Null 체크 하는 방법들

🙄서론 리스트 null을 체크하는 방식이 여러 방법이 있어서 정리할 겸 작성한다. 소개할 List null 체크 방식은 아래와 같다. - xxxxList == null - xxxxList.size() == 0 - xxxxList.isEmpty() - CollectionUtils.isEmpty(xxxxList) 테스트 방식은 2가지로 나눠서 할 예정이다. 1. List가 null일 경우 2. List가 생성된 경우 😀테스트 코드 @Test @DisplayName("nullList체크") void nullListTest() { List nullList = null; assertTrue(); // 코드작성 } @Test @DisplayName("newList체크") void newListTest() { Lis..

JVM/Java

[Java] 자바10부터 나온 var

😉서론 회사 내 모든 프로젝트가 자바8에서 자바11로 올리게 되었다. 그래서 현재 자바8 기준으로 되어 있는 소스코드들이 많았고, 자바 8 이후에 나온 기술들을 하나하나 도입을 준비 중에 있다. 이후 sonarQube(소나큐브) 라는 소스코드 품질을 높여주는 툴을 도입하게 되었고, 여기 이슈에서 var 관련 이슈가 엄청 많이 나왔다. 그래서 도입 전 var가 뭔지 어떻게 쓰면 좋은지에 대해 알아보고 결정해야 하기에 알아보게 되었다. 🤷‍♂️자바8 이전과 자바10 이후 차이점 // 자바8 이전 String message = "Good bye, Java 9"; Map map = new HashMap(); // 자바10 이후 var message = "Hello Java 10"; var idToNameMap ..

JVM/Java

[Java] Optional – orElse() vs orElseGet() 차이점 알고 쓰자.

* 2022.03.01 내용 수정 - orElse() 를 사용하는 경우 추가 - orElse() orElseGet() 작동원리 수정 😉서론 자바 8부터 지원하게 된 optional은 NullPointerException 에 대한 문제를 해결하기 위해 나왔습니다. 하지만 그런데도 null이 발생할 수 있고, null 체크를 해야만 하는 경우가 빈번합니다. 그러므로 null일 시 default 값을 넣어줄 수 있는데 그중에서 orElse()와 orElseGet() 이 존재합니다. 이를 그냥 이것저것 사용할 수도 있지만, 알고 쓰는 것과 모르고 쓰는 것은 천지 차이기 때문에 한 번 정리해보았습니다. 🤔둘의 차이? public T orElse(T other) public T orElseGet(Supplier

JVM/Java

[Java] Map getOrDefault 를 활용하자.

getOrDefault 를 모르기 전까지 방식 1. 일단 get으로 원하는 값을 가져오고, 2. 있는지 없는지 null 체크 하고, 3. null 이면 새로 만들어준다. getOrDefault를 안 이후 1. 가져오고, 없으면 새로 만들어준다. 분명 잘 쓰고 있다고 생각했지만, 내가 모르는 많은 라이브러리등이 존재한다.. 계속 알아갈 때 마다 재밌넹

JVM/Java

[Java] ArrayList 조건 삭제 'removeIf'

서론 arrayList 경우 내가 삭제하고 싶은 애를 삭제하고 싶은 경우 for문을 돌리고, if문을 통해 삭제하는 경우가 있었다. 하지만 자바8부터 생긴 removeIf를 사용하면 람다식을 이용하여 간단하게 삭제할 수 있다. 본론 자바8에 생긴 람다 중 Predicate 를 사용하여 list에서 원하는 애를 삭제하는 방식을 이용하고 있다. 이는 stream에 있는 filter랑 같은 원리이다. 리턴 값은 boolean으로 하나라도 삭제가 되면 true, 삭제가 없으면 false를 반환한다. 예제 위처럼 removeIf를 통해 조건에 맞는 데이터들을 한 번에 정리할 수 있다.

Hyo Kim
'java8' 태그의 글 목록