인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

김민정님의 프로필 이미지

작성한 질문수

기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM

클래스 로더 및 로딩 과정

클래스 로딩 순서에 관해 질문이 있습니다.

해결된 질문

작성

·

164

0

10분 24초에 클래스를 로딩하기에 앞서서 검사, 준비, 해결과정을 거친다고 하셨는데 로딩을 한 후 링킹(검사,준비, 해결)과정을 수행하는 것이 아닌가요? 로딩전 링킹과정 후 로딩을 하는 것인가요? 제가 잘못이해하고 있는 것인지 궁금합니다

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

'로딩'이라는 말은 개념적으로 여러 곳에 사용됩니다. 강의 중 제가 언급하는 로딩은 링킹을 포함한다고 보시면 되겠습니다. 따라서 로딩 후 링킹하는 것이 아니라 링킹을 포함해 로딩과정이 완성되는 것입니다. 물론 로딩을 클래스 파일을 메모리로 읽어들이는 정도로 의미를 제한 할 수 있습니다. 즉, '메모리에 로딩 후'라는 표현을 줄여 '로딩'으로 말 할 수 있습니다.

이런 내용들이 섞이면서 혼선이 있었던 것이 아닌가 싶습니다. 안타깝지만 이런 부분에 대해 Java 가상 머신 명세에서도 명확히 구분되고 있지 않습니다.

정리하면...
1. 로딩은 .class 파일을 파일 시스템에서 읽어오는 것을 말하는 것일 수 있음
2. JVM에서 클래스 로딩은 링킹 과정을 포함하며 링킹 과정은 실패할 수 있음
3. 링킹 실패는 로딩 실패와 같은 의미로 볼 수 있음

참고하시기 바랍니다. 😄

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 김민정님, “기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM” 강의에서 언급하신 클래스 로딩 순서에 대한 질문에 대해 답변드리겠습니다.

Java에서는 클래스 로딩 절차가 명확히 정의되어 있습니다. 이 절차는 클래스가 처음으로 참조될 때 수행되며, 주요 단계는 다음과 같이 진행됩니다:

  1. 로딩(Loading): 클래스 파일이 JVM에 로드되어 메모리에 적재됩니다. 이 단계에서 클래스 파일의 바이너리 데이터가 JVM에 전달되며, 정의된 클래스에 대한 Class 객체가 생성됩니다.

  2. 링킹(Linking): 로딩된 클래스가 사용할 수 있도록 준비하며, 여기에는 세 가지 하위 단계가 포함됩니다:

    • 검증(Verification): 클래스 파일의 유효성을 검사하여 JVM에서 안전하게 실행될 수 있는지를 확인합니다.
    • 준비(Preparation): 클래스의 정적 필드가 기본값으로 초기화됩니다.
    • 해결(Resolution): 심볼릭 참조를 직접 참조로 변환하는 과정입니다.
  3. 초기화(Initialization): 정적 초기화 블록과 정적 필드 초기화가 실행됩니다.

따라서, 말씀하신 “로딩 전 링킹과정”은 잘못된 이해로 보이며, 실제로는 로딩이 선행되고 그 후에 링킹이 수행되는 것이 맞습니다. 즉, 클래스를 먼저 로드한 후, 검사, 준비, 해결의 링킹 과정을 거치게 됩니다.

아래의 링크는 이 과정에 대한 자세한 설명이 담긴 질문이니 참고하시기 바랍니다:
- Java 클래스 로딩 및 초기화 과정 이해하기

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.