본문 바로가기

Programing/JVM(Java, Kotlin)

(97)
[javac] 자바 컴파일러: 컴파일 단계 질문: - 질문 제목 : 클래스의 순서는 어떤 기준으로 정하나요?? - 질문 내용 : main메서드에 Time객체를 생성하고 참조변수 t를통해 시간을 호출하는데 Time 객체를 생성하는 클래스가 선언된곳보다 뒤에 있어도 상관 없는건가요??? 코드는 위에서 아래로 진행되는거 아닌가요??? public class Exe5 { public static void main(String[] args) { Time t = new Time(); t.hour = 12; t.minute = 34; t.second = 56; System.out.println(t.hour); System.out.println(t.minute); System.out.println(t.second); } } class Time { int hou..
성지순례와 인터페이스 과거에 쓴 글이 미래에 갑자기 흥(?)하는 경우가 있다. 인터페이스를 보면서 그런 생각을 했다.
[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..