Exemplo n.º 1
0
    void KillObjectTest()
    {
        //기사와 마법사를 생성하고, 생성한 기사와 마법사를 새로운 변수에 대입하여 하나 더 만든 뒤, 이름만 달리해 준다.
        C05_Knight knight = new C05_Knight();

        knight.name  = "기사 1";
        knight.hp    = 100;
        knight.power = 10;

        C05_Knight knight2 = knight;

        knight2.name = "기사 2";

        C05_Mage mage = new C05_Mage();

        mage.name  = "마법사 1";
        mage.hp    = 50;
        mage.power = 20;

        C05_Mage mage2 = mage;

        mage2.name = "마법사 2";

        //첫 번째 기사와 마법사를 죽인다.
        KillKnight(knight);
        KillMage(mage);

        //그 후 출력해보면, 기사는 두 번째 기사가 죽어있고 첫번째와 두번째 기사의 정보가 동일하다.
        //Class는 대입할 때 메모리 주소(포인터)를 대입하므로, 기사2는 기존에 생성된 기사1을 가리키는 값일 뿐이다. 따라서 기사1과 기사2는 하나의 객체를 가리킨다.
        //KillKnight에서 Class 변수를 가져가 변경했으니, 이는 기사1과 기사2가 가리키는 주소에 위치한 값을 실제로 변경했다. 따라서 hp도 0이 되었다.
        Debug.Log($"죽은 기사는 {knight.name} (체력: {knight.hp})이며, 살아있는 기사는 {knight2.name} (체력: {knight2.hp}) 입니다.");

        //반면 마법사는 mage와 mgae2가 선언될 때 각각 별개의 메모리 공간을 갖는다.
        //둘은 다른 객체이므로 마법사 1의 정보 변경(사망)은 마법사 2에게 영향을 주지 않을 뿐더러, mage의 값을 복사해서 가져간 KillMage의 영향도 받지 않아서 원본의 hp도 그대로다.
        Debug.Log($"죽은 마법사는 {mage.name} (체력: {mage.hp})이며, 살아있는 마법사는 {mage2.name} (체력: {mage2.hp}) 입니다.");
    }
Exemplo n.º 2
0
 void KillMage(C05_Mage mage)
 {
     mage.hp = 0;
     Debug.Log($"{mage.name} 사망 (체력: {mage.hp})");
 }