본문 바로가기

Programing/JVM(Java, Kotlin)

(96)
[Java8] Optional.of 쓸 때 주의할 점... Optional 사용시 NULL이 가능한 값에 아래와 같이 사용하면 제대로 동작하지 않을 수 있다. // Exception e...final Optional message = Optional.of(e.getMessage());MyException exception = new MyException(message.orElse("문제가 있습니다!"), getReturnUrl(gotoUrl)); 원래 의도는 메세지를 가져왔을 때 없으면 기본 메세지를 orElse 를 통해 우아하게(?) 사용하려고 하는 의도일 것이다. 하지만, java.util.Optional#of 의 경우 아래와 같이 시그너쳐가 되어 있다./** * Returns an {@code Optional} with the specified presen..
을/를, 이/가, 은/는 을 알아서 붙여주면 좋겠다. 포켓몬을 보다 보면 조사가 옵션처럼 붙어서 뭔가 아마추어 처럼 보이는 느낌이 있다.바로 한글의 특성 때문인데 이것을 구현하기 쉬울 거라고 생각했는데 나름 생각할게 더 있었다. 자바 코드/** * 한글코드 값은 아래 주소를 참고한다. * http://jrgraphix.net/r/Unicode/AC00-D7AF * * 로직에 대한 이해는 아래 주소를 참고한다. * http://gun0912.tistory.com/65 * * 속기에 대한 글을 참고하면 좋다. * http://blog.naver.com/blue8943/220227426526 */ @Slf4j public class StringUtils { /** '가'의 한글코드 값(시작) */ private static final int HANGULE_SYL..
Java 8 - get & put -> computeIfAbsent 바꾸기 예제 computeIfAbsent(K key, Function
[lombok] mutable 변수에 대한 PMD 에러 lombok으로 참조 데이터 타입중 가변(mutable) 데이터 타입의 경우 발생하는 문제.String이나 Long인 경우에는 객체의 값을 바꿀 수 없는 불변(immutable) 데이터 타입이다. 문제는 Date나 일반 객체의 경우는 mutable이다. 그런 경우 FindBugs에서는 EI_EXPOSE_REP2, Priority: Low 에러를 낸다.This code stores a reference to an externally mutable object into the internal representation of the object. If instances are accessed by untrusted code, and unchecked changes to the mutable object wou..
[Java] enum find static 헬퍼 메서드 enum에 가끔 코드와 같은 값을 같이 넣을일이 있다.문제는 enum 코드 간에 데이터 변환이 필요하다. enum -> 코드로 가는 것은 getter를 제공하면 되는데, 반대는 열거에서 찾아야 한다.enum의 values()를 이용하면 iteration이 가능하기 때문이다. enum 타입이 많은 경우에 최악의 경우 O(n)의 복잡도를 가지게 된다.따라서 정적으로 map을 넣어두었다가 key에 해당하는 enum을 반환하게 헬퍼 메서드를 종종 만들게 된다. 그런데 키튼님에게 코드 리뷰를 받다 보니 Hashmap을 사용할 경우 CPU가 높이 치솟는 일이 발생할 수 있다고java.util.concurrent.ConcurrentMap 를 사용하라고 권장하셨다. 대중 템플릿은 아래와 같은 형태가 된다.public ..
TreeMap 정렬 순서 바꾸기 TreeMap의 경우 key 로 정렬을 해준다.그런데 정렬 지정이 되어 있지 않는 경우 자연 정렬(natural ordering)을 한다고 되어 있었다. 만약에 역순으로 정렬을 하려면 어떻게 하나? 대부분 대답이 Comparator 인터페이스를 구현을 해서 -1 을 곱해주는 것으로 알려주고 있었다.하지만 자바에는 이미 구현되어 있는 reverseOrder라는 것이 있었다. Collections.reverseOrder()) 트리맵을 생성할 때 아래처럼 넣어주면 된다.new TreeMap(Collections.reverseOrder()) 출처: stackoverflow: http://stackoverflow.com/questions/9338209/how-to-print-treemap-in-reverse-or..
[Java Anti-pattern] Passing the Arbitrary Number of Arguments 자바에서는 "Arbitrary Number of Arguments"이름으로 임의의 개수의 인자를 받을 수 있는 ... 이라는 구문이 있다.시스템에서 제공하는 printf가 그 예이다.public PrintStream printf(String format, Object... args) 인텔리J에서는 다음과 같은 경고를 보여줄 때가 있다. (Github)Reports any calls to a variable arity method where the call has a single argument in the variable arity parameter position, which is either a null or an array of a subtype of the variable arity paramet..
[annotaion] javax.annotation.Nullable 파라메터로 객체를 넘겼을 때 다음과 같은 코드는 잠재적으로 예외가 발생할 수 있다.public long apply(@Nullable Item item) { return item.getPrice(); }만약 item이 null로 넘어갔을 경우 getPrice 메서드를 호출하는 순간 NullPointerException이 발생할 것이다. 인자에 위와 같이 @Nullable로 표시를 할 수 있다.반면에 반대의 경우에는 @Nonnull으로 표시할 수 있다. 이러한 것들은 JSR305 스펙에 의한 것들로 다음과 같은 것들이 있다.CheckForNullCheckForSignedCheckReturnValueDetaintedMatchesPattern$CheckerMatchesPatternNonnegative$Check..