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

강민성님의 프로필 이미지
강민성

작성한 질문수

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

복사(값)와 참조

knight2 hp값이 어떤식으로 할당되나요

작성

·

230

0

만약에 Kngiht knight2 = new Knight();를 생성하고

knight2.hp=0 을 안적고 그대로 

knight2.hp 값을 출력하면

질문1

왜 65번째줄 knight.hp=100값을가져오는지 이해가 안됩니다 

질문2

knight.hp = 100을한다고 해서 class Knight의 hp변수가 public int hp=100으로 바뀌는건 아니지 않나요?

질문3

Kngiht knight2 = new Knight();경우말고

Knight knight2 = DeepCopy();일때 질문1의 경우와 같이 knight.hp=100 값을 가져오는 과정이 같은건가요?

힙에 new로 생성한 Knight가 두개가 생성되고 

kngiht와 knight2는 각각 다른 힙영역을 참조하고 있다고 생각했는데 혼란스러운 상황입니다

답변 2

0

글을 읽다가 궁금해서 남깁니다.

1번질문에서는 원래 knight2.hp는 0이나와야 하지않나요?

new Knight();를 했을때 초기값으로 hp가 100이 되려면

class knight를 생성할때 public int hp =100;을 해줘야 1번답변 knight2.hp =100이 되지않나요?

0

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

힙에 new로 생성한 Knight가 두개가 생성되고
kngiht와 knight2는 각각 다른 힙영역을 참조하고 있다고 생각했는데 혼란스러운 상황입니다

네 처음에 이해하신게 맞는 상황입니다.

질문1 왜 65번째줄 knight.hp=100값을가져오는지 이해가 안됩니다 

knight.hp = 100 값을 가져온다는게 어떤 의미일까요?
해당 부분은 knight 객체의 hp를 100으로 설정하는 것이지,
무엇인가를 '가져오는' 개념이 아닙니다.

질문2 knight.hp = 100을한다고 해서 class Knight의 hp변수가 public int hp=100으로 바뀌는건 아니지 않나요?

네 아닙니다. 생성된 knight라는 객체의 hp를 100으로 세팅하는 것이죠.

질문3
Kngiht knight2 = new Knight();경우말고
Knight knight2 = DeepCopy();일때 질문1의 경우와 같이 knight.hp=100 값을 가져오는 과정이 같은건가요?

질문이 잘 이해가 안 갑니다.
깊은 복사를 했다면 기본적으로 별도의 객체이기 때문에 knight.hp = 100로 1번 객체의 값을 설정하더라도, 2번 객체에는 영향을 주지 않습니다.

강민성님의 프로필 이미지
강민성
질문자

제가 깊은 복사 개념을 잘못 이해하고 있었어요

ㅠㅠ 답변해주셔서 감사합니다!

강민성님의 프로필 이미지
강민성

작성한 질문수

질문하기