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

시슴님의 프로필 이미지
시슴

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘

A* 알고리즘 질문드립니다

해결된 질문

작성

·

147

0

안녕하세요 

매번 좋은 강의 해주셔서 감사합니다

다름이 아니라 

A* 알고리즘 수업 내용에 관해 질문드립니다.

A* 알고리즘에서 PriorityQueue 를 이용해서 구현하셨는데

PriorityQueue 의 노드로 PQNode 를 선언? 구현하셨는데

앞서 동적배열 수업에서 등등 노드들은 class 형태로 구현을 하셨는데

왜 PQNode는 struct 로 구현하셨는지 궁금합니다

struct 를 class로 변경해도 실행 결과는 같은데

struct로 PQNode를 구현한 이유를 알려주실수 있으신가요?

(struct로 꼭 구현을 해야된다거나 struct가 class 보다 더 나은점이라든지 등등)

답변 부탁드리겠습니다

답변 2

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

둘 중 무엇으로 구현해도 동작은 똑같지만,
C#에서 struct는 복사 형식이고 class는 참조 형식이라는 미묘한 차이가 있습니다.
딱히 둘 중 무엇이 더 좋다고 할 수는 없고, 장단점이 서로 교차 됩니다.

PQNode를 struct로 만들 경우,
PQNode a와 PQNode b가 있는 상황에서
a = b를 하면 b 데이터의 모든 값들이 a에 복사 됩니다. (여기선 F, G, Y, X 이렇게 4개의 정수가 복사 되겠네요)

반면 둘을 class로 만들 경우,
new를 할 때 힙 영역에 실제 데이터가 할당되고,
그 원본 데이터의 주소를 a와 b가 각기 들고 있게 됩니다.
즉 a = b를 하게 될 경우 딱히 어떤 복사가 일어나진 않고,
a가 바라 보고 있는 주소값만 b가 바라 보고 있던 주소값으로 동일하게 바뀌게 됩니다.

복사가 너무 빈번하고 부담되면 class가 낫고,
반대로 데이터 복사 비용이 낮아 오히려 메모리 할당 쪽이 부담되면 struct가 낫습니다.
아무튼 처음엔 어렵고 헷갈리는 개념이니 그냥 둘 중 무엇을 사용해도 일단은 큰 차이 없습니다.
C#의 Tuple이란 애도 예전엔 struct였다가 C# 4.0으로 넘어오면서 class로 바뀌기도 하고 뭐 그렇습니다.

0

시슴님의 프로필 이미지
시슴
질문자

답변 감사합니다

시슴님의 프로필 이미지
시슴

작성한 질문수

질문하기