본문 바로가기

Programing/JVM(Java, Kotlin)

(96)
성지순례와 인터페이스 과거에 쓴 글이 미래에 갑자기 흥(?)하는 경우가 있다. 인터페이스를 보면서 그런 생각을 했다.
[Java] Wrapper 클래스 vs Overload 메서드 중 우선순위는? 카페에 어떤 분이 아래와 같은 질문을 올렸다. 질문 public class OverrideVsAutoUnboxing { public static void main(String[] args) { System.out.println(new Integer(59)); } } 위와 같은 코드가 59로 출력되는 원리가 궁금합니다. 'new Integer(숫자)'를 system.out.println하면 숫자가 출력되는 원리에 대해 설명주세요. 코드리뷰 일단 위와 같은 코드는 여러 안티패턴(피해야 되어야 할 코드)이 들어가 있다. 불변 클래스의 생성자 생성 아래의 코드에 대한 내용이다. new Integer(59) 자바에서 문자열 타입으로 문자열을 생성할 때 new String()으로 문자열을 만들지 말라고 하는 이유가..
[Java] forEach와 for each 의 차이점은? 카페에 올라온 질문이다. import java.util.ArrayList; import java.util.List; public class LoopTest { public static void main(String[] args) { List list = new ArrayList(); for (int i=0; i { System.out.println(str); }); // 2 for(String str : list) { System.out.println(str); } } } 1번과 2번의 차이점은 무엇인가요? 코드리뷰 일단 차이점을 알아보기 전에 코드를 리뷰해보자. Review 1. ArrayList 객체 생성 일단 ArrayList를 List 인터페이스로 받은 것은 잘한 것 같다. 왜 그런지는 이펙티브자..
[Java] 인스턴스 변수 초기화 어떤분이 초기화 블럭을 물어본 사항이 있어서 확인한 사항을 첨가해서 기록으로 남깁니다. 질문 - 제목 : 클래스 초기화 블럭 사용하는 이유 - 내용 : 초기화 블럭 부분을 공부하면서 느낀건데 왜 굳이 클래스 초기화 블럭을 사용해야 하는지 잘 모르겠어요. 그냥 초기화 코드를 분리해서 관리하기 위함이 전부인가요? 개인적으로 이런 존재의 이유(raison d'être)에 대해 고민을 하는 것은 좋다고 생각한다. 문제는 혼자서 고민을 하다가 주제에서 벗어난 곳으로 빠질 위험이 있고 답을 찾기 어려울 수도 있다. 이럴 경우 친구나 커뮤니티에 물어봐서 어느정도 답을 찾는 것이 좋을 것 같다. (좋은 질문이었다는 이야기를 어렵게 하고 있음..) 접근법 일단 초기화 블럭에 대해서는 Java Tutorials 중 Cla..
ThreadLocalRandom and Random ThreadLocalRandom 자바7에서 추가된 기능중에 ThreadLocalRandom 가 있다. 스레드 별로 난수 생성을 고립시키는 랜덤 클래스이다. java.lang.Math#random 처럼 ThreadLocalRandom 역시 내부에 고정된 holder를 통해 난수를 생성한다. 문제는 멀티스레드에서 이 메서드를 사용할 경우 적절하게 동기화를 시켜야하는데, 많은 수의 스레드가 난수를 생성하려고 할 경우 각자의 랜덤 생성기를 가지게 하는 방법을 통해 서로간의 경합으로 인해 성능이 떨어지는 것을 방지하라고 주석에 적혀있다. ThreadLocalRandom 의 경우 current() 라는 정적 메서드를 통해 객체를 얻도록 되어 있다. public static ThreadLocalRandom curre..
[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의 ..