추상적이고, 내부에 정확한 수치가 정해지지 않은 원형의 상태
1. 이상적인 세계에 존재하는 하나의 기준
2. 실제로는 존재하지 않는다
=> 유니티에서는 레벨에 배치된 인스턴스가 아니라 프로젝트에 존재하는 클래스 형식이라고 이해할 수 있다.
3. 가장 중요한 특성만 추상적으로 정한다.
= 구체적인 수치가 없다.
class Car : vehicle
{
public float speed;
public string name;
// 그 외 등등
}
이상적인 형태(클래스) 를 '인스턴스화' 한 하나의 독립적인 객체
1. 자기 자신을 스스로 챙길 수 있다.
2. 하나의 온전한 단위로 존재한다.
3. 실존하는 세상(레벨) 에 있다.
4. 하나의 원본(클래스)에서 파생되었어도, 서로 구분이 가능하다.
class MakeCar : MonoBehaviour
{
void start()
{
Car Ferrari = new Car();
Ferrari.speed = 100f;
Ferrari.name = "Ferrari";
// ...
Car Audi = new Car();
Audi.speed = 50f;
Audi.name = "Audi";
// ...
}
}
Car 라는 클래스로부터 파생된 두개의 오브젝트 'Ferrari' 와 'Audi'.
speed 와 name 이라는 특성에 구체적인 수치를 정해주었다.
둘은 서로 독립적인 객체이기 때문에 Ferrai 객체를 지운다고 하더라고 Audi 객체는 사라지지 않는다.
코드를 통해 더 세밀하게 알아보도록 하자.
public class Animal
{
public string name;
public string sound;
public float weight;
}
public class MakeAnimal : Monobehavior
{
void Start()
{
Animal dog = new Animal();
dog.name = "Dog";
dog.sound = "Mung Mung";
dog.weight = 10.0f;
Animal cat = new Animal();
cat.name = "Cat";
cat.sound = "Mew";
cat.weight = 5.0f;
Debug.Log(dog.name);
Debug.Log(dog.sound);
Debug.Log(cat.name);
Debug.Log(cat.sound);
}
}
이 상태에서 코드를 더 추가해보겠다.
void Start()
{
// ....
cat = dog;
cat.name = "Wolf";
// ....
}
직관적으로 이해했을 때 dog의 정보를 cat에 대입하고, cat의 name값을 바꿨기 때문에 dog의 정보는 그대로일 것이라고 생각된다.
하지만 코드를 출력해보면 그렇지가 않다.
출력코드
Wolf
Mung Mung
Wolf
Mew
오브젝트의 개념은 화살표로 이해할 수 있다.
처음에 cat 이 가리키던 오브젝트, dog 가 가리키던 오브젝트가 별도로 있었지만,
cat = dog; 코드를 통해 cat 이 dog 과 같은 오브젝트를 가리키게 된 것이다.
결과적으로 cat의 정보를 수정한다 하더라고 같은 오브젝트를 가리키던 dog의 정보도 함께 수정되게 된다.
이 때, 기존에 cat 이 가리키던 오브젝트는 아무도 관여하고 있지 않기 때문에 사실상 사라진 객체로 취급한다.
검증 코드 추가
void Start()
{
// ...
dog.name = "Carrot";
// ...
}
코드 결과
Carrot
Mung Mung
Carrot
Mew
#6. 오버로드(Overload) (0) | 2024.07.28 |
---|---|
#5. 인스턴스(Instance) (0) | 2024.07.24 |
#4. 벡터 연산 (5) | 2024.07.24 |
#2. 변수와 함수 (0) | 2024.07.18 |
#1. 유니티 엔진의 이해 (0) | 2024.07.17 |