인프런 커뮤니티 질문&답변

김창환님의 프로필 이미지

작성한 질문수

더 자바, 코드를 조작하는 다양한 방법

클래스 로더

'클래스 로더' 강의에서 클래스 로딩을 설명할 때 잘못된 것 같아 질문드립니다.

작성

·

1.1K

3

클래스로딩을 진행할 때 먼저 자식 클래스로더가 찾아보고 찾지 못할 경우 부모 클래스로더에게 위임하는 것으로 '자바 성능 최적화' 라는 책에서 배웠습니다.

하지만 강의에서 08분02초부터 클래스로딩 개념을 설명해주실 때 제일 먼저 부모 클래스로더에게 위임한다고 설명해주시는데 이 개념이 잘못된 개념인 것 같아 조심스럽게 질문남깁니다.

chatGPT에게 물어봤을 때도 동일하게 자식 클래스로더가 먼저 찾아보고 부모에게 위임한다고 답변을 줍니다.

답변 2

5

백기선님의 프로필 이미지
백기선
지식공유자

"찾아본다"와 "로딩한다"를 구분해야 할 것 같은데요. "찾아본다"는 것은 이미 어떤 클래스가 메모리로 로딩이 되었는지 찾아본다는 것인데, 그 일은 Application 클래스로더가 먼저 하는거죠. 대신에, 그 클래스가 없어서 로딩을 해야되면, 그때는 부모한테 요청해서 로딩하는게 맞습니다. (그럼 또 마찬가지로 그 부모는 자기가 이미 로딩했나 "찾아본" 다음에 부모한테 로딩을 요청하는거죠. 그러다가 부모가 로딩을 못하면, 자신이 로딩을 하는게 자바의 기본적인 delegation model입니다.

그러니까 "클래스로더가 먼저 찾아보고 부모에게 위임한다"라는 김창환님 말씀이 맞긴한데, 제가 생각한 delegation model의 핵심은... "먼저 찾아본다"에 있는게 아니라 "부모에게 위임한다(그리고 부모가 읽지 못하면 자신이 읽는다)"에 있다고 생각해서 그렇게 설명드렸습니다. 아마 제가 실수한 부분이라면 "(이미 읽은 클래스인지) 먼저 찾아본다"를 언급하지 않았다는 거겠네요. 제 생각엔 너무 당연한 과정이었는데 그 부분을 빠트려서 혼란스러웠을 수도 있겠네요.

제가 참고한건 ClassLoader API 문서입니다.

https://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html

The ClassLoader class uses a delegation model to search for classes and resources. Each instance of ClassLoader has an associated parent class loader. When requested to find a class or resource, a ClassLoader instance will delegate the search for the class or resource to its parent class loader before attempting to find the class or resource itself. The virtual machine's built-in class loader, called the "bootstrap class loader", does not itself have a parent but may serve as the parent of a ClassLoader instance.

감사합니다.

 

 

0

IMG_0490.png저도 여기서 Application -> Extension -> Bootstrap 순서 같은데요. 영어가 제대로 번역한진 모르겠지만.. 찾아보니깐 이 순서인거 같아요 , 자식에서 부모가 맞는거 같은데.. 저도 답변이 궁금합니다.

 

출처 : https://www.baeldung.com/java-classloaders