작성
·
123
1
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요?예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
Class clazz = String.class; // 1.클래스에서 조회
Class helloClass = Hello.class;
위 방식으로 클래스를 조회하는것을 보면 각각의 클래스에 Class라는 static변수에 접근하는 것으로 보이는데 이는 컴파일 시 모든 클래스들에 직접 입력하지 않아도 Class라는 static변수(private static Class class)가 자동으로 생성되기 때문인가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
sticker_inverts.06님이 질문하신 내용에 대해 설명드리겠습니다.
Java에서는 각 클래스가 자동으로 생성되는 “Class”라는 정적 변수와 관련된 부분은 컴파일러에 의해 자동으로 추가되는 것이 아니라, Java 언어 자체에서 제공하는 기능입니다. 각 클래스는 메모리 로딩 시 해당 클래스에 관련된 메타데이터를 포함하는 Class<T>
객체로 표현됩니다. 이 객체는 ClassLoader
에 의해 JVM 메모리에 로드되며, 이로 인해 각 클래스는 자신의 클래스 타입을 나타내는 Class
객체에 접근할 수 있습니다.
질문하신 코드에서:
Class clazz = String.class;
Class helloClass = Hello.class;
이렇게 Class
객체를 얻는 방식은 컴파일러가 추가적 코드를 삽입하지 않아도, Java에서 각 클래스에 기본적으로 제공되는 .class
문법을 통해 이루어지는 것입니다. 즉, 이는 클래스에 별도로 정의되는 정적 변수는 아니며, 해당 클래스의 Class
객체를 나타내는 상수로서 JVM이 관리하는 메모리 영역에 존재합니다.
유사한 주제에 관련된 질문들을 인프런에서 확인할 수 있습니다. 다음의 질문은 클래스 로딩과 관련된 객체 참조 방식에 대해 더 깊이 이해하는 데 도움을 줄 것입니다:
이해를 돕기 위해서는 Java의 Class 객체가 어떻게 작동하고 메모리에서 어떻게 관리되는지를 학습하는 것도 유용할 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.