클래스 로딩 순서에 관해 질문이 있습니다.
10분 24초에 클래스를 로딩하기에 앞서서 검사, 준비, 해결과정을 거친다고 하셨는데 로딩을 한 후 링킹(검사,준비, 해결)과정을 수행하는 것이 아닌가요? 로딩전 링킹과정 후 로딩을 하는 것인가요? 제가 잘못이해하고 있는 것인지 궁금합니다
답변 2
0
'로딩'이라는 말은 개념적으로 여러 곳에 사용됩니다. 강의 중 제가 언급하는 로딩은 링킹을 포함한다고 보시면 되겠습니다. 따라서 로딩 후 링킹하는 것이 아니라 링킹을 포함해 로딩과정이 완성되는 것입니다. 물론 로딩을 클래스 파일을 메모리로 읽어들이는 정도로 의미를 제한 할 수 있습니다. 즉, '메모리에 로딩 후'라는 표현을 줄여 '로딩'으로 말 할 수 있습니다.
이런 내용들이 섞이면서 혼선이 있었던 것이 아닌가 싶습니다. 안타깝지만 이런 부분에 대해 Java 가상 머신 명세에서도 명확히 구분되고 있지 않습니다.
정리하면...
1. 로딩은 .class 파일을 파일 시스템에서 읽어오는 것을 말하는 것일 수 있음
2. JVM에서 클래스 로딩은 링킹 과정을 포함하며 링킹 과정은 실패할 수 있음
3. 링킹 실패는 로딩 실패와 같은 의미로 볼 수 있음
참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. 김민정님, “기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM” 강의에서 언급하신 클래스 로딩 순서에 대한 질문에 대해 답변드리겠습니다.
Java에서는 클래스 로딩 절차가 명확히 정의되어 있습니다. 이 절차는 클래스가 처음으로 참조될 때 수행되며, 주요 단계는 다음과 같이 진행됩니다:
로딩(Loading): 클래스 파일이 JVM에 로드되어 메모리에 적재됩니다. 이 단계에서 클래스 파일의 바이너리 데이터가 JVM에 전달되며, 정의된 클래스에 대한
Class객체가 생성됩니다.링킹(Linking): 로딩된 클래스가 사용할 수 있도록 준비하며, 여기에는 세 가지 하위 단계가 포함됩니다:
- 검증(Verification): 클래스 파일의 유효성을 검사하여 JVM에서 안전하게 실행될 수 있는지를 확인합니다.
- 준비(Preparation): 클래스의 정적 필드가 기본값으로 초기화됩니다.
- 해결(Resolution): 심볼릭 참조를 직접 참조로 변환하는 과정입니다.
- 검증(Verification): 클래스 파일의 유효성을 검사하여 JVM에서 안전하게 실행될 수 있는지를 확인합니다.
초기화(Initialization): 정적 초기화 블록과 정적 필드 초기화가 실행됩니다.
따라서, 말씀하신 “로딩 전 링킹과정”은 잘못된 이해로 보이며, 실제로는 로딩이 선행되고 그 후에 링킹이 수행되는 것이 맞습니다. 즉, 클래스를 먼저 로드한 후, 검사, 준비, 해결의 링킹 과정을 거치게 됩니다.
아래의 링크는 이 과정에 대한 자세한 설명이 담긴 질문이니 참고하시기 바랍니다:
- Java 클래스 로딩 및 초기화 과정 이해하기
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
compareTo를 사용하는 이유가 뭔가요?
0
45
1
[실습] MyString에 복사 생성자 추가
0
38
1
안녕하세요~ 회수라는 의미에 대해서 질문합니다.
0
71
1
equals의 재정의(overriding)에 대해서
0
80
2
TestEx 객체 생성 시 생성자 호출 질문
0
62
2
[MyString 실습 인스턴스 중복 생성 문의] MyString.setString(String param)
0
100
2
주소록 실습 3단계에서 막혔어서 조언을 구하려고 질문 드립니다.
0
85
2
해시 알고리즘 관련으로 질문이 있습니다.
0
73
2
21분 경 Old generation의 GC 설명 질문입니다.
0
102
3
임시 객체의 첫 번째 상황에 대한 질문
0
70
2
String 객체가 하나 더 생성되는 이유가 궁금합니다
0
189
3
하위 클래스와 상위 클래스의 생성자 순서
0
104
2
GC의 age와 관련하여 질문 있습니다.
0
97
2
Object Header 의 Klass word (39강 36:00)
0
115
2
method area는 이름이 class area가 아니고 왜 method aread인지 궁금합니다.
0
139
2
교안 p.305 'throw 필수' 질문
0
81
1
Metaspace에 대한 질문
0
257
2
clone() 메서드를 재정의함으로써 Deep copy로 구현한다로 이해하면 될까요?
0
120
2
MyListEx 질문드립니다.
1
136
1
part3 강의 개강
0
197
2
문자열 비교 강좌에서 문자열 선언 방법 간에 hashCode() 값 관련한 질문입니다.
0
222
2
상속과 오지랖의 콜라보 예제에서 clone() 메서드에 대한 문의드립니다.
1
182
2
보이지 않는 임시 객체의 자막 수정 요청
0
116
2
스레드 관련해서 질문이 있습니다.
0
203
1





