상세 컨텐츠

본문 제목

#3. 클래스와 오브젝트

유니티 학습/세미나 자료

by 남민우_ 2024. 7. 18. 17:23

본문

1. 클래스

개발자가 생각하는 가장 이상적인 형태

추상적이고, 내부에 정확한 수치가 정해지지 않은 원형의 상태

1. 이상적인 세계에 존재하는 하나의 기준

2. 실제로는 존재하지 않는다

 => 유니티에서는 레벨에 배치된 인스턴스가 아니라 프로젝트에 존재하는 클래스 형식이라고 이해할 수 있다.

3. 가장 중요한 특성만 추상적으로 정한다.

 = 구체적인 수치가 없다.

class Car : vehicle
{
	public float speed;
	public string name;
	// 그 외 등등
}

 

2. 오브젝트

현실적으로 존재하는 형태

이상적인 형태(클래스) 를 '인스턴스화' 한 하나의 독립적인 객체

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 객체는 사라지지 않는다.

 

3. 코드

코드를 통해 더 세밀하게 알아보도록 하자.

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);
	}
}

 

현재 상태

Animal 클래스로부터 Cat 과 Dog 이라는 오브젝트 생성

 

이 상태에서 코드를 더 추가해보겠다.

void Start()
{
	// ....
	
	cat = dog;
	cat.name = "Wolf";

	// ....
}

 

직관적으로 이해했을 때 dog의 정보를 cat에 대입하고, cat의 name값을 바꿨기 때문에 dog의 정보는 그대로일 것이라고 생각된다.

하지만 코드를 출력해보면 그렇지가 않다.

 

출력코드

Wolf
Mung Mung

Wolf
Mew

 

 3-1. 오브젝트의 개념

Cat 오브젝트를 가리키던 화살표가 사라지고, Dog 오브젝트를 새로이 가리키게 된다.

오브젝트의 개념은 화살표로 이해할 수 있다.

처음에 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

관련글 더보기