본문 바로가기

Programing/자바

(59)
[Java] JRE update 업데이트된 라이센스 조항 회사에서 사용하는 맥북프로를 켰더니 JRE 업데이트가 떴다. 업데이트를 할까 말까 망설이다 진행을 했더니 라이센스가 변경되었다가 아래와 같이 나온다. 문제는, 회사 컴퓨터는 상업용 랩톱에 해당된다. 따라서 별도의 라이센스가 필요하기 때문에 업데이트를 진행하지 않기로 하였다. Java is still free? 자바는 여전히 무료는 비상업용 기기에만 해당한다.
[macOS] JDK 삭제하기 설치는 패키지 파일을 이용하면 되는데 삭제는 언인스톨러가 없다. 지우는 방법은 /Library/Java/JavaVirtualMachines 로 우선 이동한다. ls 명령으로 목록을 보면, 3개가 보인다. (최근에 JDK 11을 설치했다.) cd /Library/Java/JavaVirtualMachines/ $ ls 1.6.0.jdk jdk-11.0.3.jdk jdk1.8.0_211.jdk 지우는 방법은 지울 대상 디렉터리를 rm 명령으로 지우면 끝. $ sudo rm -rf jdk-11.0.3.jdk sudo를 안하면 권한이 없다고 나온다. 지워지면 자동으로 java path는 이전 버전으로 바뀐다. $ java -version java version "1.8.0_211" Java(TM) SE Runti..
[Java] LinkedList가 과거에는 doubly circular linked list? 저자가 운영하는 카페에 질문이 올라왔다. 3판 / 598페이지 / 내용 중 "실제로 LinkedLIst클래스는 이름과 달리 링크드 리스트가 아닌 더블 써큘러 링크드 리스트로 구현..." 요지는 책에는 LinkedList의 구현이 더블 순환 연결리스트로 구현이 되어 있다고 되어 있는데, 본인이 코드를 짜보니 아닌 것 같다는 질문이다. 그런데, 자바의 정석 3판에 인쇄본에 따라 내용이 다르게 되어 있는 것 같다. 질문자의 사진은 아래와 같다. 내가 가지고 있는 3판은 아래와 같다. 진실은? Java SE 11 버전의 Java Doc을 보면 아래와 같이 되어 있다. 다시말해 이중 연결리스트로 구현이 되어 있다는 것이다. LinkedList라는 클래스는 1.2부터 추가가 되었다. 1.2 버전은? JDK1.2의 ..
byte[]을 String으로 바꾸기 방법 1 StringBuilder 를 이용해서 한땀한땀 문자열을 만든다. String byteArrayToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (final byte b : bytes) { sb.append(String.format("%02X", b & 0xff)); } return sb.toString(); } 방법2 BigInteger를 이용하여 변환한다. byte[] bytes; // ... String.format("%02X", new BigInteger(1, bytes)); 위의 경우는 "2479205A7E68AFA9" 와 같이 대문자로 만들 경우인데, 재미있는 것은 BigInteger.toString()의 경우 내부적으..
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 를 컨버터로 자동으로 등록을 해주었기 때문이다. 하지만, 초기에 이 클래스..