deleteRoot의 "파라미터"인 ary는 61번째 줄에서 넘겨주는 "인자" ary와는 서로 다릅니다. 두 변수는 모두 같은 오브젝트를 처음에 가리키고 있는 것은 맞으나 그들 자체는 서로 다릅니다.
비유를 하자면, A라는 사람(인자 ary)가 B라는 사람 (파라미터 ary)에게 똑같이 '아무개'(가리키고 있던 오브젝트)를 가리키도록 지시했는데, 50번째 줄에서 B라는 사람이 새로 만들어진 '홍길동'을 가리키게 된 것입니다. deleteRoot에서는 '홍길동'만 값을 변경했고 '아무개'는 변경하지 않았습니다. A는 여전히 '아무개'를 가리키고 있는 상태입니다.
반면에 createHeap에서는 B가 계속 '아무개'를 가리키고 있던 상태로 값을 수정했으니 '아무개'의 값이 바뀝니다.
chmp1408 3년 전
자바에서 객체를 넘겨서 하는 작업에 의문점이 생겨 질문드립니다.
55라인 heapSort 메소드에서 ary 객체를 받아서 createHeap(ary)을 하면 별도의 리턴을 받지 않아도 ary가 최소힙으로 만들어진 상태가 됩니다. ary객체를 그대로 넘겨서 그런거같은데
61라인 deleteRoot(ary)을 호출할때도 마찬가지로 ary객체(최소 힙으로 구현된 상태)를 넘겨주면
43라인 ary보다 길이가 1 작은 newHeap에 ary의 루트를 제외한 값들을 그대로 넣어주고 newHeap을 다시 createHeap()에 넘겨주어 newHeap을 최소 힙으로 만들어 주고 ary가 재구성된 최소힙인 newHeap을 가르키게 합니다.
근데 여기서 deleteRoot가 root를 리턴해주고 다시 호출 되었던 61라인으로 돌아가면 ary가 재구성된 newHeap이 아닌 재구성 되기 이전의 ary 그대로 입니다.
createHeap() 에서는 넘겨준 ary의 값이 수정되고 함수가 종료 되어도 수정된 값이 그대로 유지 되었는데
deleteRoot() 는 왜 함수가 종료되면 ary가 수정되기 이전의 값을 그대로 가지고 있는지에 대해서 알고 싶습니다.