• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

참조형 배열에 관한 질문!!

23.12.31 08:33 작성 조회수 247

0

이 강의에서 배운 내용을 토대로 참조형 배열에 관해 궁금한 점이 있습니다.

 

  1. 참조형 배열도 결국 배열 안에 메모리 주소값을 저장하여 인덱스를 통해 메모리 주소값에 접근하는 방식인가요?

예를 들어서 List<Item> items = new ArrayList<>(); 이런 식으로 Item 타입을 가지는 items라는 배열을 생성했다라고 하면, 이 안에 인덱스 번호를 통해 배열 안의 위치에 접근하면 Item 객체에 관한 메모리 주소값이 있을테고, 이 메모리 주소값에 접근하는 방식인가요?

 

 

  1. 만약 List<Item> item = new ArrayList<>(); 배열 변수를 선언하고 배열 안에 값을 넣었다고 생각을 한다면, 강의에서 말했듯, " 자바는 항상 변수의 값을 복사해서 대입한다 " 라는 말이 있는데

여기서 궁금한게, 또 다른 새로운 배열을 만들어서 해당 item을 복사해서 넣는다고 한다면

 

즉, List<Item> anotherItem = new ArrayList<>(item);

이런식으로 item 안에 값들을 anotherItem으로 새로운 배열을 만들어서 집어넣는다면, anotherItem 안에 값들을 수정해도 item에는 영향을 미치지 않나요?

 

만약 영향을 미치지 않는다면 왜 그런지 궁금합니다.

결국 객체의 메모리 주소에 접근할텐데.. (너무 헷갈립니다 ㅠㅠ)

답변 2

·

답변을 작성해보세요.

0

David님의 프로필

David

2023.12.31

안녕하세요. Gloz0315님, 공식 서포터즈 David입니다.

  1. 해당 배열의 요소는 Item 객체의 참조 값을 가지게 되고 해당 참조 값을 통해 객체로 접근하게 됩니다.

  2. 아래 상황에서 newItems의 요소에 변경이 생겨도 items는 영향을 받지 않습니다. 내부적으로 값을 저장하고 있는 배열을 새롭게 생성하여 값을 복사하기 때문입니다.

List<Item> items = new ArrayList<>();
List<Item> newItems = new ArrayList<>(item);

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.31

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

참조형 배열, 즉 자바의 컬렉션을 이용한 객체 배열에 대해 질문 주셨군요. 참조형 배열이 객체의 메모리 주소를 저장하고, 이 주소를 통해 객체에 접근하는 방식인지, 그리고 새로운 컬렉션에 기존 컬렉션의 내용을 복사할 때, 각 컬렉션 간의 영향도에 대해 궁금해하시는 것으로 이해했습니다.

관련된 내용을 더 잘 이해하실 수 있도록 “기본형 참조형 관련 질문”에 대한 강사님의 답변을 참고하시면 도움이 될 것 같습니다.

강사님의 답변 요약:
- 참조형 변수는 객체의 참조값을 저장합니다.
- 참조형 변수를 다른 변수에 할당하면 참조값이 복사되므로, 두 변수는 같은 객체를 가리킵니다.
- 하나의 변수를 통해 객체의 상태를 변경하면 다른 변수를 통해서도 변경된 상태를 볼 수 있습니다.
- 컬렉션을 새로 만들 때 기존 컬렉션의 참조값이 복사되므로, 복사된 컬렉션 내의 객체를 수정하면 원본 컬렉션의 객체도 영향을 받습니다.

상세한 설명을 원하시면 아래의 링크를 확인해 주세요.

해당 강의에서는 자바의 기본형과 참조형 데이터의 차이와 특징, 그리고 참조형 데이터의 복사와 관련된 동작 방식에 대해 설명하고 있습니다. 질문하신 내용과 매우 밀접한 개념이므로 참고하시면 좋을 것 같습니다.

채널톡 아이콘