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