클래스와 오브젝트 (retr0 강의노트)

5P2RS5·2022년 7월 21일
post-thumbnail

객체 지향 언어의 특성

오브젝트
자기 자신을 스스로 챙길 수 있다.
하나의 온전한 단위로 존재한다.
실존하는 세상에 산다.
하나의 원본에서 파생 되어도, 서로 구분 가능하다.

클래스
이상적인 세계에 존재하는 단 하나의 기준
실제로는 존재하지 않는다.
가장 중요한 특성만 개략적으로 알려준다.
구체적인 수치가 없다.

private : 외부에서 class에 접근이 불가능하게 한다.
class의 멤버변수 혹은 멤버함수는 기본적으로 private처리가 되어있다.
public : 접근지정자, 유니티 에디터 혹은 class외부에서 접근이 가능하도록 한다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HelloClass : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Animal jack = new Animal(); // 객체 생성
        jack.name = "JACK";
        jack.sound = "Bark";
        jack.weight = 4.5f;

        Animal nate = new Animal();
        nate.name = "NATE";
        nate.sound = "Nyan";
        nate.weight = 1.2f;

        Animal annie = new Animal();
        annie.name = "ANNIE";
        annie.sound = "Wee";
        annie.weight = 0.8f;
        
        nate = jack;

        nate.name = "JIMMY";
        nate.sound = "Cheese";
        
        Debug.Log(jack.name);
        Debug.Log(jack.sound);
        
        Debug.Log(nate.name);
        Debug.Log(nate.sound);
        
        Debug.Log(annie.name);
        Debug.Log(annie.sound);
        
    }
}
public class Animal
{
    public string name;
    public string sound;
    public float weight;
}

📌중요 개념

위 코드 nate = jack;
Call by reference, 가져와서 쓴다는 개념
직관적으로 nate에 jack의 정보가 단순 복사되지 않는다.
nate가 가진 정보가 사라지게 된다.
즉 JACK를 가리키는 변수는 jack와 nate 두개가 된다.
nate는 Garbage Collection이 되어 사라진다.
변수는 단지 가리키는 화살표

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Jumper : MonoBehaviour
{
    public Rigidbody rb; // 실제 에디터에 오브젝트의 리지드바디를 가리키는 참조자
    void Start()
    {
        rb.AddForce(0, 500, 0);
    }
}
profile
☀️ Infra_Architecture 🔁 🌔 Game_Dev

0개의 댓글