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

kyk님의 프로필 이미지
kyk

작성한 질문수

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

기본형 vs 참조형2 - 변수 대입

참조값 복사에 따른 인스턴스 동일성 질문

해결된 질문

작성

·

372

·

수정됨

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]

  1. 강의에서(12:00부분) 참조값만 복사하고 인스턴스를 복사하는 것이 아니라는데,

     결국 같은 인스턴스를 접근하게 되잖아요

     

  2. 그러면 위 뜻이 인스턴스가 동일해지는 것은 맞지만, 참조값을 복사하는 것이지 인스턴스를 복사하는 것이 아니라서 잘못 인지하지 말라는 뜻인가요?

     

    아니면 인스턴스가 달라서 참조값만 복사한 것이기에 인스턴스를 복사하는 것이 아니라는 뜻인가요?

     

Data dataA = new Data(); // 1.Data인스턴스 생성후 dataA에 참조값 넣음
dataA.value = 10;
Data dataB = dataA;      // 2.dataA 참조값을 복사하고 대입함

System.out.println("dataA.value = " + dataA.value); // 10
System.out.println("dataB.value = " + dataB.value); // 10
// 3.dataB는 dataA의 인스턴스에 동일하게 접근하게됨

 

답변 2

1

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

A a = new A(); 이 코드가 실행되면

자바는 A의 인스턴스(객체)를 메모리에 생성하고, 그 위치(메모리주소)를 a 라는 변수에 담습니다.

만약 A의 인스턴스가 0x10 에 존재한다면 a 에는 0x10이 담겨 있겠지요? 이 때 a의 값을 복사하면,

A b = a;

a에 있던 0x10의 값을 b에 복사합니다. 결국 a, b 둘 다 0x10 을 갖게 됩니다. 두 변수가 같은 인스턴스를 참조하게 되지요.

여기서 주의해야 할 점은 주소값 복사가 일어난 것이지 인스턴스(객체) 생성이 다시 일어난건 아니라는 것입니다.

감사합니다.

kyk님의 프로필 이미지
kyk
질문자

그러면 주소값만 복사한거라서 같은 인스턴스를 참조하게 되지만, A a와 A b의 객체 인스턴스 자체는 서로 다른거죠?

안녕하세요 kyk님!

인스턴스도 동일합니다 🙂

동일한 인스턴스에 접근할 수 있는 방법이 a, b 두 개로 늘어난 것입니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용과 유사한 상황에 대해 다른 수강생이 질문했던 내용이 있어 그 답변을 참고하시면 도움이 될 것 같습니다.

다음 링크의 게시글에서 참조값과 인스턴스의 관계에 대한 설명을 확인하실 수 있습니다.

답변 내 이미지를 참고하신다면 이해에 더욱 도움이 될 것입니다.

정보를 제공하는 이미지

감사합니다.

kyk님의 프로필 이미지
kyk

작성한 질문수

질문하기