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

TH Kwon님의 프로필 이미지
TH Kwon

작성한 질문수

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

참조형과 메서드 호출 - 활용

매개변수도 메서드 호출시 인스턴스가 만들어지는게 맞다면

해결된 질문

작성

·

203

·

수정됨

0

안녕하세요? 자바를 복습하면서 강의를 듣고 있는 학생입니다.

 

지난 강에서 dataA의 필드 변경을 위해 changeReference라는 메서드를 사용하셨을 때, Data dataX를 파라미터로 사용했었는데 강의에선 dataA와 동일한 참조값을 갖는 dataX라는 인스턴스도 메모리 상에 생성되었습니다.

 

아직 진도가 나가진 않았지만 기존에 알고 있었던 제 지식으로는 changeReference 메서드 호출시 스택 메모리 상에서 dataX가 생성되고 메소드 종료시 dataX는 소멸되고 힙 메모리 상 변경된 값은 갱신되는 것으로 알고 있는데 이게 맞나요?

 

이게 맞다면 이번 강의의 createStudent 메서드 파라미터들도 메서드 호출시 스택 메모리 상에 각각 인스턴스(name이나 age 등)가 생성될텐데 그림에는 이 부분이 없어서요. 너무 그림이 산만해질까봐 넣지 않으신 것으로 예상하긴 하는데 제가 아는 바가 틀린 것이 아니라면 이 부분을 넣는 것이 처음 배우는 분들을 위해 도움이 되지 않을까해서 여쭤봅니다.

답변 1

1

제가 이해한 지식대로 설명해드리겠습니다.
일단 dataA와 동일한 참조값을 갖는 dataX라는 인스턴스도 메모리 상에 생성되었다고 보기에는 어렵지 않을까 싶습니다. new 키워드가 없으니까요. 정확하게는 dataA의 참조값 예를 들어 x001이라 한다면, Data datax는 Data 타입의 참조값을 선언할 수 있는 데이터 타입의 변수명 dataX를 선언한 것뿐이라고 생각합니다. 즉, 결과적으로는 dataA의 참조값을 dataX에 복사해서 대입한 것 뿐입니다.

강사님께서 엄청 이야기 하신 자바에서 변수의 대입은 복사해서 대입한다.

이 원칙이 적용될 뿐입니다.

제가 힙 메모리는 아직 배우지 못해서, 잘 모르겠지만, 입문편부터 지금까지 잘 달려오신분이라면, 교재 20p의 그림에서 student.name = name // student.age = age ... 은 쉽게 이해하지 않을까 싶습니다.

참고용으로만 이해해주세요~

TH Kwon님의 프로필 이미지
TH Kwon
질문자

답변 감사합니다. 보고 좀 생각해봤는데 제가 자바 안에서 인스턴스란 용어를 너무 남용한 것 같아요. 사실 프로세스 같은 추상화된 개념의 실제 구현체도 인스턴스라 쓰긴하지만 자바 내에서 인스턴스는 보통 클래스의 실제 객체만을 가리킬텐데 말이죠. 심지어 dataX는 단순히 지역 변수인데 이건 더더욱 인스턴스가 아닐텐데 말이에요.

 

제 질문에서 dataX라는 '인스턴스' 문장이 좀 잘못된 것 같아요. 말씀주신 것처럼 dataX가 인스턴스가 아니라 변수명, 그러니까 지역변수라고 하는 게 맞는 것 같네요.

TH Kwon님의 프로필 이미지
TH Kwon

작성한 질문수

질문하기