강의

멘토링

커뮤니티

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

빠밤님의 프로필 이미지
빠밤

작성한 질문수

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

복사(값)와 참조

제대로 이해한것인지 궁금합니다.

작성

·

325

0

5분대부터 헷갈리고 있습니다.

59번째 줄에 killKnight(knight); 가 남아있어서 그런가? 싶은 생각이 듭니다.

1. 59번째 줄 이후로 knight.hp값이 0이 되있는 상태인데

쓰여진 코드를 보면 knight2.hp는 처음부터 0을 참조하는것이 아닌가 싶어서요

62번째 줄의 knight.hp=0을 쓰신 이유를 모르겠습니다

위 생각과는 상관없이 설명만을 토대로 정리할 겸 써보자면

2. 5분대에 있는 61번째 쓴 줄이

C++ 에서는 Knight& knight2 = knight 라고 표현될수 있는 건가요?

3. new를 써서 메모리 할당을 했는데 해제는 안하나요?

답변 3

1

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

1. 네 knight.hp = 0은 없다고 생각하고 분석해주시기 바랍니다.
2. C++에서 C#으로 넘어올 땐 한가지만 기억하면 편합니다.
C#의 struct는 C++의 struct처럼 복사가 되고,
C#의 class는 C++로 치면 항상 *를 함축하고 있다고 생각하시면 됩니다.

C# : struct Knight ->    C++ : Knight 복사
C# : class Knight -> C++ : Knight* or Knight&

struct Knight로 만들고 knight를 다른 변수나 함수 인자로 넘겨주면,
C++ struct와 마찬가지로 그냥 복사가 일어납니다.
class Knight로 만들고 knight를 건내주면,
실제로는 계속 주소값을 넘기면서 원본을 건드리게 됩니다.

빠밤님의 프로필 이미지
빠밤
질문자

아 포인터표시를 함축하는군요

빠른 답변 감사드립니다.

빠밤님의 프로필 이미지
빠밤
질문자

new는 나중에 설명이 나오나요?

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

C++에서 new는 동적 할당의 의미이지만
C#에서는 꼭 그렇지는 않고 오히려 더 단순합니다.
class를 new하면 C++처럼 동적 할당이지만,
struct를 new하면 그냥 스택에서 초기화를 합니다.

빠밤님의 프로필 이미지
빠밤
질문자

빠른 답변 감사합니다.

앞으로 모르겠으면 바로바로 적어봐야겠군요 ㅎㅎ

0

현재 강의 상에서 knight 와 knight2 사이에KillKnight(knight) 가 있어서 knight.hp=0 인 값을 복사해서 knight2.hp 가 0 이 되는게 맞지요? 

0

저도 비슷한 질문이 있어서 댓글 남깁니다.

7:15 에서

knight  와 knight2 가 독립된 객체인것은 이해가 되는데

Knight2.hp = knight.hp;

Knight2.attack = knight.attack;

 를 통해  knight.hp 인 "0" 을 참조하여

knight2.hp 도 "0" 이 됩니다.

이렇게 의도하신것이 맞나요?

 

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

질문이 잘 이해가 안 갑니다.
int는 '참조'하는 개념이 아니기 때문에, 그대로 복사됩니다.
Knight.hp가 100이었다면 knight2.hp = 100이 되는 셈이죠.

빠밤님의 프로필 이미지
빠밤

작성한 질문수

질문하기