본문 바로가기

Programing/JVM(Java, Kotlin)

(96)
[Java] byte[]을 String으로 바꾸기 같이보기: Kotlin 에 대한 내용은 [Kotlin] byte[]을 String으로 바꾸기 를 참고하세요. 주의: 실무에서 아래에 적혀있는 BigInteger를 이용해서 테스트를 진행하다가 특정한 상황일 때 제대로 변환을 못하는 경우를 발견하였다. 처음으로 시작하는 16진수 숫자가 7F 이하일 경우만 제대로 동작을 한다. 예를 들어 0xDD 일 경우는 앞에 0으로 채운다. "dd20e7d3a2f1e814993511540a404615" 일 경우 크기가 16이 아닌 17개인 앞이 0으로 채워진 값을 반환하는 문제가 발생했다. 그래서 javax.xml.bind.DatatypeConverter의 parseHexBinary 를 쓰기를 권장한다. 2020-02-05 see https://inneka.com/pro..
JDK8 업데이트를 하다(181 to 211), SHA / AES 오늘 배포가 있어서 도비님하고 develop 브랜치에 개발한 것을 서로 merge를 하였다. 그런데 내 노트북에서는 테스트 코드가 모두 성공하는데 도비님 노트북에서 테스트 코드가 계속 깨진다. 깨지는 부분은 AES-256 암호화 하는 쪽 문제이다. 키의 크기는 맞는데 메세지가 달랐다. AES Illegal key size or default parameters 오늘 아침에 도비님께 물어보니 자바 특정버전 까지는 AES 256 암호화를 미국내에서만 사용하도록 제한을 걸어놓았다고 한다. 나의 JDK버전은 1.8 181릴리즈라 제한이 풀려서 문제가 없었던 것이다. 도비님의 버전은 그 이하였나보다. https://blog.kjslab.com/94 를 참고하자. 이참에 JDK8 릴리즈 업데이트를 해놓아야 겠다. ..
부모클래스에서 로깅시 서브클래스의 이름 찍기 추상클래스에서 로그를 찍고 싶을 때가 있다. lombok을 쓰고 있기에 단순히 abstract class 위에 @Slf4j 을 붙여주면 땡이지만 이렇게 하면 로그 클래스 이름이 Abstract 클래스 이름만 나오게 된다. 이럴 경우 상속받는 서브타입의 클래스이름이 찍게 하려면 어떻게 하면 될까? 1안 - 타입을 저장하여 파라미터로 받게 하는 방법 처음에는 2안이 있는 줄 모르고 타입을 저장하는 enum을 만들어서 Abstract 클래스의 생성자로 주입을 시켰다. 물론 이 방법도 동작을 했지만 @SuppressWarnings("unchecked") 를 붙여야 했고 서브타입이 추가 될 때 관련 없는 enum을 수정해야 한다는 것이 SRP 위반으로 보였다. 2안 - Object.getClass() 를 이용하는..
[Java] 자바버전 별 주요특징 이미 많은 사람들이 잘 정리를 해서 바퀴의 재 발명을 할 필요가 없다고 생각한다. 가끔 면접을 보러 가면 버전별 특징을 물어보는 경우가 있어서 굵직한 변화와 추가 사항은 상식적으로 알아두면 좋을 것 같아서 정리해둔다. 링크들 혼란스러운 Java 버전의 진실 (와탭 블로그) 우아한 테크 세미나 - 자바, 성능, 모니터링 이야기 후기 자바 코드의 주석 Java 런타임 (rt.jar)에는 @SupportedSourceVersion 라는 이름의 애너테이션이 있다. 용도는 소스가 지원하는 버전 정도로 해석이 가능한데, 인자로 SourceVersion이라는 열거형(enum)을 넣을 수 있다. 바로 이 SourceVersion 의 주석에 주요 특징이 적혀있다. public enum SourceVersion { /* ..
[JSON] LocalDateTime to JSON by Gson, Jackson2 이전 [Java] Date vs LocalDateTime 글에서 Date 클래스를 LocalDateTime으로 변경을 하게 된 배경에 대해 설명을 했다. 예고한대로 이번에는 변경을 했을 때 겪을 수 있는 것을 정리한다. 1. JPA 문제 낮은 버전의 JPA에서는 문제가 발생할 수 있다. 다행히 내가 사용한 JPA 2.0.2 와 구현체 하이버네이트(hibernate) 5.2.17에서는 Java8 의 시간/날짜에 대한 지원(JSR-310)이 추가되어서 문제가 없었다. 문제가 없었던 이유는 스프링 부트가 스프링 데이터의 org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters 를 컨버터로 자동으로 등록을 해주었기 때문이다. 하지만, 초기에 이 클래스..
[Java] Date vs LocalDateTime 얼마전에 Date 타입을 LocalDateTime로 바꾸었다. 가장 큰 이유는 Date 타입이 mutable 이라서 getter / setter 에서 값을 deep copy를 해서 반환하고 설정을 하라고 한다. 이유는 참조하는 곳에서 값을 바꾸면 필드의 값도 같이 바뀔 수 있기 때문이다. // 테스트 대상 Item.java public class Item { private Integer id; private String name; private String createBy; private Date createAt; public Item(Integer id, String name, String createBy, Date createAt) { this.id = id; this.name = name; this..
[Java] ArithmeticException 는 누가 던지는 것인가? #ifndef SHARE_VM_CLASSFILE_VMSYMBOLS_HPP #define SHARE_VM_CLASSFILE_VMSYMBOLS_HPP #include "oops/symbol.hpp" #include "memory/iterator.hpp" #include "trace/traceMacros.hpp" // ... #define VM_SYMBOLS_DO(template, do_alias) \ // ... \ /* exception klasses: at least all exceptions thrown by the VM have entries here */ \ template(java_lang_ArithmeticException, "java/lang/ArithmeticException") \ #end..
[Java] Inner class 에도 main 함수(진입점)이 가능하나? package goharrm; public class Outer { static class StaticInner { public static void main(String[] args) { System.out.println("main method of Static inner class is running"); } } public static void main(String[] args) { System.out.println("main method of outer class is running"); } } 내부 클래스에 대한 질문을 계속 올리는 난바 님이 제목과 같은 질문을 올렸다. 사실 뭐가 문제냐는 질문이지만 특별히 문제가 없다. 코드는 다음과 같다. 콘솔에서 실행 이전 글인 [Java] Inner cl..