해결된 질문
작성
·
295
2
구문중에 36줄 Tail = newRoom; 이 부분 질문입니다.
첨부한 그림을 보시면 제가 이해한 방식인데요.(마우스 우버튼ㅡ새 탭에서 이미지 열기ㅡ로 크게 보실수 있습니다)
제가 Tail.Next와 newRoom.Prev를 연결하여 연결포탈을 만드는것까지는 이해를 하였는데요. 최종적으로 Tail에 newRoom의 주소를 덮어쓰는(?) 부분이 이해가 어렵군요. 왜냐면 Tail은 newRoom이 추가되기 전 마지막 방의 주소인데, Tail에 newRoom의 주소를 넣게 되면(덮어쓰기?) 새로운 방이 추가되는 것이 아니라 기존 마지막방 주소를 새로운 방의 주소로 덮어쓰는 느낌이 드는데 제가 잘못 생각한 것인지요?
아니면, 우리가 A와 B의 값을 교환할때의 방식처럼
X = A;
A = B;
B = X;
기존 Tail주소에 다른 이름을 붙여주고 나서, Tail을 newRoom의 주소로 새롭게 정의하는 것이 맞지 않나 하는 생각이 들어서요.
답변 2
2
참조 타입인 것을 혼동하시는 것 같네요.
Tail은 그 자체로 데이터가 있는게 아니라, 단순히 이미 만들어진 Room을 가리킨다 (참조한다)고 생각하시면 됩니다.
Tail은 항상 마지막 방을 가리키고 있어야 합니다.
새로운 방을 추가하면, NewRoom을 만들고 기존의 Tail 에다 이어 붙입니다.
작업이 다 끝났으면, 이제 Tail을 마지막 방으로 옮겨줘야겠죠 (Tail = NewRoom)
0
------------------------------------------------------------
제 나름대로 이해한 내용을 올리려고 보니까 벌써 답글을 달아주셨네요. 쉽게 풀이해주셔서 감사합니다. 저는 포장지를 감싸는 식으로 이해하려고 했는데 이렇게 이해하는것도 맞을지 모르겠네요.
근데 사실 이렇게하더라도 Prev와 Next도 Tail처럼 참조변수로 본다면... Prev와 Next도 Tail이라는 포장지에 붙어있기 때문에 포장지를 옮기면 같이 옮겨지는 것 아닌가? 싶긴 한데요.
하지만, 강사님의 그림을 보니까 Tail은 주소참조변수(스택)이지만, Prev와 Next는 힙에 있는 Data 옆에 고정된 것으로 봐야할 것 같은데... 어떻게 Data와 참조변수(Prev,Next)가 같은방 안에 함께 고정될 수 있는지 이 부분은 확실하게 이해가 가질 않네요ㅠ
사실 참조를 이해하는데 가장 효과적인 방법은 C/C++의 포인터를 공부하는 방법입니다.
메모리도 까보기 편하고 정확히 동작을 이해할 수 있죠.
Tail은 주소참조변수(스택)이고, Prev와 Next는 힙에 있는 Data 옆에 고정된 것으로 봐야할것 같아서 살짝 혼동이 되네요ㅠ
Prev, Next, Tail 모두 참조 변수이고,
이는 단순하게 보면 어떤 주소값을 들고 있는 변수에 불과합니다.
(그리고 주소참조변수=스택은 아닙니다.)
우리가 설계한 class Room의 설계에도에서 T Data; Room Prev; Room Next;
이렇게 만들었다면, 실제로 new Room을 할 때 힙 메모리에
Data, Prev, Next 변수 공간이 사이좋게 잡힙니다.