소개
게시글
질문&답변
2023.12.17
강의자료에서 링크의 Resolve 내용에 대한 질문입니다.
이거와 관련된 내용으로, 11:00쯤에 말씀하신 '심볼릭 메모리 레퍼런스를 힙에 들어있는 Book 객체 인스턴스를 가르키도록 하는 과정'은 틀린 설명 같습니다. resolve 단계에서는 Book 객체가 힙에 할당되어 있지 않기 때문이죠. 제 생각엔 Book 클래스와 Book 클래스 생성자의 심볼릭한 참조를 실제 메서드 영역에 할당된 클래스 정보와 생성자에 매핑 한다는 게 더 적절한 표현인 것 같습니다. 관련해서 틀린 부분이 있다면 피드백 부탁드립니다.
- 0
- 2
- 223
질문&답변
2022.05.05
Concrete 빌더에 관한 질문
생각의 폭을 넓혀주셔서 감사합니다
- 0
- 2
- 137
질문&답변
2022.03.30
클래스의 로드 시점
답변 감사합니다. " 내부 정적 클래스도 다른 클래스와 마찬가지로 최초로 사용이 될 때 로딩이 됩니다." 제가 궁금한 부분을 정확히 말씀해주셨습니다. 내부 정적 클래스도 다른 클래스들과 마찬가지로 최초로 사용될 때 로딩, 초기화 과정을 거친다는 말씀이시겠죠? 그렇다면 아래와 같이 Holder를 사용하지 않는 싱글톤 구현 클래스또한 "최초로 사용될 때" 로딩되므로 이른 초기화라고 말할 수 있나요? public class Settings { private static final Settings INSTANCE = new Settings(); private Settings() { } public static Settings getInstance() { return INSTANCE; } } 강의에서 제가 이해한바로는 아래와 같은 싱글톤 구현 기법은 사용되지 않음에도 불구하고 초기화가 일어나므로 자원의 낭비가 될 수 있다고 이해했습니다. 그런데 두 방법 모두 필요에 의해 최초로 사용될 때 로딩된다면 holder를 사용하지 않는 싱글톤 방식이 자원의 낭비라고 말 할 수 있는지 궁금합니다. 초기화에 관한 문서를 찾아봐도 top-level 클래스가 사용되지 않음에도 불구하고 초기화 되는 조건은 찾지 못했습니다. A class or interface type T will be initialized immediately before the first occurrence of any one of the following: T is a class and an instance of T is created. T is a class and a static method declared by T is invoked. A static field declared by T is assigned. A static field declared by T is used and the field is not a constant variable (§4.12.4). T is a top-level class, and an assert statement (§14.10) lexically nested within T is executed. 저는 제 생각이 항상 옳다고 생각하지 않는 사람입니다. 많은 개발자들이 holder를 사용하데엔 분명 이유가 있다고 생각하며 기선님이 말씀해주신 자원 낭비를 방지하는 목적도 이해가 됩니다. 다만.. 지금 단계에서 holder가 불필요하다가 아닌 holder를 사용하지 않은 것과 사용 한 것의 차이가 명확히 이해되지 않습니다.
- 2
- 5
- 628
질문&답변
2022.03.29
클래스의 로드 시점
1. 자바의 클래스 로더는 세 가지 종류가 있더군요 1. bootstrap class loader 2. extension class loader 3. system class loader 제 질문과 관련된 세 번째 로더 system class loader 는 classpath에 존재하는 클래스의 초기화를 담당하며 일반적으로 개발자가 정의한 클래스는 classpath 내에 존재하게 되므로 로드 시점에 아래와 같이 싱글톤 인스턴스를 만드는 방법은 이른 초기화라는 것이 이제는 납득이 됩니다. public class Settings { private static final Settings INSTANCE = new Settings(); private Settings() { } public static Settings getInstance() { return INSTANCE; } } https://stackoverflow.com/questions/24538509/does-the-java-classloader-load-inner-classes 여담으로 stackoverflow에서 좋은 글을 발견한 것 같아 공유합니다. 제 나름 정리하면 기본적으로 class Loader는 요청이 올 때 클래스를 로딩하는 것이고 system class loader 또한 프로그램이 로딩될 때 특정 위치에 있는 클래스를 로드하는 것을 요청받았 을뿐 내부 정적 클래스는 system class loader 의 관심사 밖이다 정도로 이해하면 될까요? 2. 어딘가에선 classpath가 환경변수라고 하는데 제 기준 환경변수는 jdk의 경로입니다. 만약 그렇다면 jdk의 경로만으로 system class loader 는 제가 정의한 클래스의 위치를 어떻게 아는거죠?
- 2
- 5
- 628
질문&답변
2021.12.08
캐릭터가 바라보는 방향을 기준으로 회전하기
감사합니다 선생님 ㅎㅎ 영감을 얻었습니다.
- 0
- 4
- 1.2K