inflearn logo
강의

Course

Instructor

[MMORPG Game Development Series with C# and Unity] Part 2: Data Structures and Algorithms

Linked List Implementation Practice

Tail = newRoom; 질문 드립니다

Resolved

407

spacemilk

24 asked

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의 주소로 새롭게 정의하는 것이 맞지 않나 하는 생각이 들어서요. 

C#

Answer 2

2

Rookiss

참조 타입인 것을 혼동하시는 것 같네요.
Tail은 그 자체로 데이터가 있는게 아니라, 단순히 이미 만들어진 Room을 가리킨다 (참조한다)고 생각하시면 됩니다.

Tail은 항상 마지막 방을 가리키고 있어야 합니다.
새로운 방을 추가하면, NewRoom을 만들고 기존의 Tail 에다 이어 붙입니다.

작업이 다 끝났으면, 이제 Tail을 마지막 방으로 옮겨줘야겠죠 (Tail = NewRoom)

0

spacemilk

------------------------------------------------------------

제 나름대로 이해한 내용을 올리려고 보니까 벌써 답글을 달아주셨네요. 쉽게 풀이해주셔서 감사합니다. 저는 포장지를 감싸는 식으로 이해하려고 했는데 이렇게 이해하는것도 맞을지 모르겠네요. 
근데 사실 이렇게하더라도  Prev와 Next도 Tail처럼 참조변수로 본다면... Prev와 Next도 Tail이라는 포장지에 붙어있기 때문에 포장지를 옮기면 같이 옮겨지는 것 아닌가? 싶긴 한데요.
하지만, 강사님의 그림을 보니까 Tail은 주소참조변수(스택)이지만, Prev와 Next는 힙에 있는 Data 옆에 고정된 것으로 봐야할 것 같은데... 어떻게 Data와 참조변수(Prev,Next)가  같은방 안에 함께 고정될 수 있는지 이 부분은 확실하게 이해가 가질 않네요ㅠ 

0

Rookiss

사실 참조를 이해하는데 가장 효과적인 방법은 C/C++의 포인터를 공부하는 방법입니다.
메모리도 까보기 편하고 정확히 동작을 이해할 수 있죠.

Tail은 주소참조변수(스택)이고, Prev와 Next는 힙에 있는 Data 옆에 고정된 것으로 봐야할것 같아서 살짝 혼동이 되네요ㅠ  

Prev, Next, Tail 모두 참조 변수이고,
이는 단순하게 보면 어떤 주소값을 들고 있는 변수에 불과합니다.
(그리고 주소참조변수=스택은 아닙니다.)
우리가 설계한 class Room의 설계에도에서 T Data; Room Prev; Room Next;
이렇게 만들었다면, 실제로 new Room을 할 때 힙 메모리에
Data, Prev, Next 변수 공간이 사이좋게 잡힙니다.

0

spacemilk

감사합니다! 이제 거의 이해가 된 것 같습니다^ ^

게임개발에서 주로 어느부분에 알고리즘들이 쓰이는지 궁금합니다

0

172

2

글꼴 바꿔도 자간이 좁아 찌그러져보이시는 분들

0

88

1

NullReferenceException 예외) 같은 실수하시는분 계실까봐 남겨요

0

66

1

parent를 Pos타입으로 만든 이유

0

74

1

콘솔창에 격자가 안나옴 미로 생성 X

0

133

1

격자 생성 안됨 무한루프

0

114

1

BFS 질문

0

143

2

격자 무한 출력

0

167

2

A* 의 PriorityQueue 관련 질문입니다

0

156

2

vscode에서 원그리기

0

180

1

환결설정 강의 원 그리기

0

122

1

15-17분

0

87

1

3:16초에 근데 이렇게 해가지고 부분에 "{}"를 만들어서 자식 node들을 생성하던데 왜 중괄호로 감싸게 만드는 건가요?

0

141

2

동적 배열 관련 질문입니다!

0

209

1

Big-o 표기법에서 시간 복잡도

0

167

1

7:40에서 언급하신 색상이 날아가는 문제 이해를 못하겠습니다

0

151

1

트리구현연습 강의 질문있어요

0

143

1

창은 뜨는데 맵이 나타나지 않아요.

0

175

1

Ctrl F5 하면 나오는 창은 어디서 설정할까요??

0

271

1

void CalcPathFromParent(Pos[,] parent)에 대해서

0

202

2

NullReferenceException예외가 발생했을때 어떻게 해야하나요?

0

229

1

[해결] 환경설정 강의에서 원이 이상하게 그려지는 문제

3

311

2

오른손 법칙에서 플레이어 점이 안 움직입니다

0

245

2

맵 만들기 오류

0

179

1