flrto

Unity에서의 클래스(2) 참조값 변경하기 본문

Unity/TIL

Unity에서의 클래스(2) 참조값 변경하기

갈릭새우칩 2019. 5. 13. 15:54

이전글)

2019/05/13 - [Unity/TIL] - Unity에서의 클래스(1) 클래스 정의 및 오브젝트 생성

 

Unity에서의 클래스(1) 클래스 정의 및 오브젝트 생성

Unity는 C#을 바탕으로 코딩을 한다. Unity에서의 클래스 예제는 다음과 같다. 가령 Animal 클래스를 만든다고 하면 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //Animal.cs using System.Collections; using System.Colle..

gcoding.tistory.com

※ 참조값 변경하기

전글에서 만든 Zoo 클래스에

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Zoo : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Animal tom = new Animal();
 
tom.name = "톰";
        tom.sound= "냐옹!";
 
        Animal jerry = new Animal();
        jerry.name = "제리";
        jerry.sound = "찎찎!";
 
        jerry = tom;
        jerry.name = "미키";
 
        tom.PlaySound();
        jerry.PlaySound();
    }
}

jerry = tom;

jerry.name = "미키";

 

라는 코드 2줄을 추가 하였다.

 

자, 그러면 어떻게 될까?

 

전 글에서 tom 과 jerry는 Animal 타입으로 만들어 졌고 이것은 참조타입의 변수라고 하였다.

 

참조 타입의 변수는 오브젝트 그 자체가 아니고 new를 통해 만들어진 Animal을 가리키는 참조값을 저장하는 변수 라고

하였다.

 

즉 "jerry = tom" 는 tom의 값들(name, sound등)을 jerry로 덮어쓰는 결과가 되는것이 아니라

 

tom의 참조값을 jerry에 덮어 쓰게 되는것이고

 

jerry는 tom이 가리키고 있는 Animal 오브젝트를 가리키게 될것이다.

 

즉, jerry와 tom은 같은 Animal 오브젝트를 가리키게 될것이고 jerry.name을 통해 가리키고 있는 오브젝트에 접근하여

 

값을 수정하면 tom도 같이 가리키고 있는 Animal 오브젝트의 값을 수정하는 결과가 된다.

서로 다른 Animal 오브젝트를 가리키고 있다가..

 

jerry = tom 코드로 인해 서로 같은 Animal 오브젝트를 가리키게 되고 어느 한쪽으로 접근해서 멤버를 수정하든 같이 가리키고 있는 오브젝트를 수정하게 된다.

 

 

그러면 원래 jerry 변수가 가리키고 있던 Animal 오브젝트는 아무도 가리키지 않게 되고 이것은 C#의 가비지 컬렉터가 틈틈히 자동으로 파괴하여 정리한다.

 

※ 내용 요약

· 참조 타입의 변수는 오브젝트를 가리키는 참조값을 저장한다.

· 따라서 같은 참조 타입의 변수를 = 으로 전달 받으면 가리키는 오브젝트의 멤버 값들을 전달 받는게 아니라

  가리키는 참조값을 전달 받아서 같은 오브젝트를 가리키도록 된다.

Comments