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

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

김시환님의 프로필 이미지
김시환

작성한 질문수

김영한의 실전 자바 - 기본편

참조형 변수 관련해서 질문이 있습니다.

작성

·

67

0

기본형 변수와 참조형 변수에 대해서 공부하던 중 참조형 변수에 대해서 궁금한 점이 있습니다.

객체를 만들고 변수에 할당을 하면 변수에는 해당 객체가 저장된 주소값을 저장한다는 내용은 이해를 했습니다.

하지만 곱씹어 보면서 궁금했던 점이 주소값도 결국 숫자일텐데 기본형 변수와 주소값을 어떻게 구별하는지 궁금합니다.

조금 더 풀어서 설명하면 변수에 저장된 숫자값을 기본형 변수인지 참조형 변수의 참조값인지 Java가 구별하는 메커니즘이 궁금합니다.

구글링을 해봤는데 기본형 변수와 참조형 변수의 차이점과 같은 표면적인 내용에 대해서만 나와서 질문드립니다. 강의 잘 듣고 있습니다. 감사합니다.

답변 2

1

안녕하세요. 김시환님, 공식 서포터즈 코즈위버입니다.

우리가 어떤 변수를 저장할 땐 반드시 타입을 명시해야 합니다. 그리고 그 타입이 바로 010101..로만 이루어진 바이너리 데이터를 어떻게 해석해야 하는지 단서를 제공합니다.

 

가령 아래와 같이 두 개의 변수가 있을 때

int i = 0;
Student studnet = new Student();

컴파일러는 변수 i의 타입이 int 이므로 i가 가르키는 주소의 값을 숫자로 해석해야 한다는 것을 알 수 있습니다. student의 경우 타입이 Student, 즉 원시타입이 아닌 타입이므로 이 변수가 가르키는 값이 주소라는것을 추측할 수 있습니다. 그래서 문제 없이 해석할 수 있습니다.

 

자바보다 더 오래된 언어인 C의 경우는 변수의 주소가 의미하는 것이 '값'인지 '주소'인지 해석하기 위해 변수 선언 단계에서 구분을 해줍니다. 이게 바로 포인터 개념입니다. 아래와 같은 코드가 있을 때 C에서는 주소를 담는 변수를 선언할 때 *(애스터리스크)를 사용합니다.

int number = 0 ;
int* pNumber = &number;;

nubmer 는 컴파일러가 숫자로 처리하지만, pNumber는 주소값이라고 인지할 수 있습니다. 선언부에서 구분하고 있기 때문입니다.

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 김시환님께서 질문하신 참조형 변수와 기본형 변수의 구별 메커니즘에 대해 설명드리겠습니다.

자바에서 기본형과 참조형의 구분은 컴파일러와 JVM(Java Virtual Machine)에 의해 이루어집니다. 기본형 변수는 int, float, char 등 자바 언어에서 정해진 원시 타입으로, 실제 데이터 값을 저장합니다. 반면, 참조형 변수는 객체나 배열의 주소값, 즉 메모리 상의 위치를 가리킵니다.

JVM은 메모리 관리 및 타입 관리를 철저히 수행하기 때문에 각 변수의 타입 정보를 항상 유지합니다. 따라서 자바 프로그램 내에서 어떤 변수가 기본형인지 참조형인지를 컴파일 단계에서 구별하고, 실행 시에도 이를 바탕으로 올바르게 처리할 수 있습니다.

관련하여 구체적인 설명은 김영한 강사님의 강의 중에서도 원시 타입과 참조 타입의 차이를 잘 설명하고 있습니다. 추가적으로, 이미 제공된 기본형 참조형 관련 질문에 대한 지식 공유자의 답변을 참조하면 김시환님께서 이해하는 데 도움이 될 것입니다. 이는 객체 및 배열에 대한 메모리 할당과 주소 참조의 작동 방식을 깊이 있게 설명하고 있습니다.

해당 링크는 강사님이 타당한 맥락에서 참조형과 기본형 변수의 차이를 이해하는 데 추가적인 시야를 제공해줄 것입니다. 도움이 되셨길 바랍니다!

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

김시환님의 프로필 이미지
김시환

작성한 질문수

질문하기