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

햄쮸맨님의 프로필 이미지
햄쮸맨

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

복사(값)와 참조

질문이 여러개 있어요!

해결된 질문

작성

·

384

0

1.구조체는 어느 상황에 쓰이나요?

그냥 객체가 해줄 수 있는 역할이 구조체의 역할을 포괄하고 같은 계층의 비슷한 데이터를 묶는 역할은 열거형이 할 수 있으니까 구조체는 별로 안 쓰일것 같아서요..아,열거형은 문자열만 사용 가능한가요?

2.Knight Clone()도 함수인가요?

반환값이 객체인 함수라고 보면 되는 건가요?

3.얕은 복사는 그냥 한 객체를 다른 이름으로 참조하는 것이라 볼 수 있겠고 깊은 복사는 같은 값을 가진 아예 다른 객체를 만드는 거라고 보면 되나요?

답변 4

1

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


위에가 얕은 복사, 아래가 깊은 복사 상황인데
말씀대로 일반적인 상황에서는 메모리 값 그대로만 복사하는 것은 의미가 없기 때문에
얕은 복사가 안 되고 깊은 복사를 해야 합니다.

하지만 정말 상관없는 경우도 있겠죠.
Inventory는 없고 int hp, int attack 같은 평범한 정수 수치만 갖고 있다면
그냥 그대로 메모리 값만 복사하면 하면 됩니다.

그리고 경우에 따라 Inventory 같은 참조값을 공유해도 딱히 상관없는 경우도 생기는데
예를 들어 Marine 클래스가 Marine 공방업 정보를 별도의 참조값으로 들고 있다면,
이 값은 모든 Marine들이 공통적으로 들고 있어도 되니 상관없을 겁니다.

0

햄쮸맨님의 프로필 이미지
햄쮸맨
질문자

와 ㅠㅠ 늦은 시간에 이해가 쏙 가게 그림까지..감사합니당..

0

햄쮸맨님의 프로필 이미지
햄쮸맨
질문자

음..세번째 답이 좀 햇갈려요...얕은 복사는 복사를 하긴 했는데 같은 객체를 가리키는 거고 깊은 복사는 객체 자체를 새로 만들어서 값까지 비슷하게 넣어주는 거 아닌가요? 그런데 얕은 복사는 복사를 했는데 같은 객체를 가리킨다면 이게 무슨 의미가 있죠@_@)? 그야말로 다른 이름으로 같은 객체를 불러주는 의미 아닌가요? 와 정말 햇갈린다..

0

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

1. 
열거형은 문자열, 정수 모두 됩니다.
기본적으로 열거형은 1, 2, 3에 Orc, Skeleton, Slime같은 이름을 지어주는 셈이지
자체로 데이터를 묶어서 관리하는 개념은 아닙니다.
반면 struct는 진짜 데이터를 묶어서 관리할 수 있게 해주는데
가령 hp, mp 및 기타 스탯을 따로 따로 관리하기 보다는

struct StatInfo
{
  int hp;
  int mp;
  int strength;
  int dexterity;
}

이렇게 묶어서 관리할 수 있습니다.

2.
네 그렇습니다!

3.
둘다 복사를 하고 싶은 것인데
얕은 복사는 메모리에 있는 데이터를 [그대로 복붙]만 한 셈이 됩니다.
그런데 참조형 같은 경우에는 메모리 데이터를 그대로 복붙하면 같은 객체를 참조하게 됩니다.
가령 Player가 내부적으로 Inventory를 갖고 있는 상태에서,
해당 Player를 그대로 복사하면
2 Player가 동일한 Inventory를 공유한다는 의미가 되는데 살짝 이상한 상황이겠죠.
따라서 깊은 복사를 할 때는 [메모리 데이터 복붙]을 하는게 아니라
정말 객체의 복사가 의미하는 바를 실행한다고 생각하시면 됩니다.

햄쮸맨님의 프로필 이미지
햄쮸맨

작성한 질문수

질문하기