게임 월드 속 사물을 '오브젝트'라고 합니다.

온전한 하나의 사물이라고 인식할 수 있다면

어떠한 것도 오브젝트가 될 수 있습니다.

 

예를 들어 게임 상의 캐릭터는 캐릭터 오브젝트,

탄알은 탄 알 오브젝트,

바위는 바위 오브젝트라고 할 수 있습니다.

 

게임이 아니더라도 대부분의 프로그램에서는

'하나의 독립적인 사물을 오브젝트라는 단위로 표현합니다.

그러한 오브젝트들이 상호작용하여 프로그램을 이룹니다.

 

이 장에서 배울 객체지향

독립적이며 스스로 동작하는 여러 객체 (오브젝트)가 모여

거대한 프로그램이 완성되는 구조를 만드는 방법입니다.

 

그리고 그것이 우리가 작성할 유니티 C# 스크립트의

클래스가 동작하는 방식입니다.

 

이 장에서는 클래스와 오브젝트의 개념과

그것을 어떻게 C# 문법에서 사용하는지 배웁니다.

 

또한 변수로 오브젝트의 참조를 가리키는 방식을 통해

게임 오브젝트와 컴포넌트를 여러분 마음대로 조종하는 방법을 배웁니다.


클래스와 오브젝트는

객체지향의 핵심입니다.'

 

객체지향

'사람이 현실 세상을 보는 방식'에 가깝게 프로그램을 완성하는 겁니다.

 

일반적으로 사람은 현실의 사물을 '분해'하여 생각하지 않습니다.

사람은 사물을 '하나의 온전한 독립체'로 여기는 경향이 있습니다.

 

휴대폰을 예로 들어 봅시다.

휴대폰은 프로세서, 카메라, 디스플레이, 각종 센서와 엄청난 수의 논리회로로 이루어져 있습니다.

하지만 우리는 휴대폰을 여러 부품의 집합으로 여기지 않고

하나의 온전한 물건(오브젝트)으로 봅니다.

 

객체지향 프로그램을 이러한 오브젝트의 집합으로 구성하는 방식입니다.


5.1.1 클래스

3장에서 클래스 class

묘사할(추상화) 대상관련된 코드(변수와 메서드 등)

묶는 틀이라 고 했습니다.

 

예를 들어 사람을 추상화한 Human 클래스에는

사람의 특징을 규정하는 변수와 메 서드가 구현됩니다.

 

사람, 몬스터, 아이템 등 다양한 사물에 관한 코드를

각자의 클래스로 만들어 묶어두면

코드 관리가 훨씬 쉬워집니다.

 

다음과 같이 사람에 관한 Human 클래스를 만든다고 생각해봅시다.

 

class Human {
	string name;
	void Walk();
	// ...Human에 관한 변수와 메서드를
}

 

여기서 Human 클래스 내부의 변수 name과 Walk() 메서드는

그냥 '이름'과 '걷기'가 아닙니다.

이들은 '사람의 이름'과 '사람의 걷기'입니다.

 

정리하면 클래스는 표현하고 싶은 대상을 추상화하여

대상과 관련된 변수와 메서드를 정의하는 틀입니다.

 

클래스는 프로그램 속에 실제로 존재하는

사물(실체 또는 오브젝트)이 아닙니다.

클래스는 틀 입니다.

 

틀은 물건이 아니지만 틀(클래스)에 쇳물을 부어

실제 물건 (오브젝트)을 만들 수 있 습니다.


5.1.2 오브젝트

물건의 설계도클래스와 달리

오브젝트 object는 실제로 존재하는 물건 (실체) 입니다.

 

Human 클래스를 사용하여

철수와 영희 두 오브젝트를 만들었다고 합시다.

이들의 관계는 다음 그림처럼 표현할 수 있습니다.

 

 

Human 클래스는 실제로 존재하는 오브젝트가 아닙니다.

하지만 Human 클래스라는 틀을 사용해

실제 존재하는 Human 오브젝트를 찍어낼 수 있습니다.

 

우리는 Human 클래스로

두 개의 Human 오브젝트(철수와 영희)를 생성했습니다.

 

여기서 클래스는 하나만 존재하지만

클래스를 기반으로 생성한 오브젝트는

여러 개 존재할 수 있다는 사실에 주목합니다.

 

이렇게 클래스라는 틀로 오브젝트를 찍어내 실체화하는 것인스턴스화한다고 하며,

인스턴스화를 이용해 생성된 오브젝트인스턴스라고 합니다.

 

오브젝트는 인스턴스를 포함하는 개념이므로 두 단어는 혼용됩니다.

이 책에서는 오브젝트가 실시간으로

어떤 클래스에서 복제 생성되었다는 사실을 강조하기 위해

때로는 오브젝트를 인스턴스라고도 표기합니다.


5.1.3 오브젝트의 독립성

하나의 원본 클래스에서 여러 개의 오브젝트를 생성할 수 있습니다.

그럼에도 오브젝트는 서로 독립적이며 구별 가능한 실체입니다.

 

위 그림에서 철수와 영희 모두 Human 타입의 오브젝트입니다.

하지만 이들을 서로 다른 개별적인 실체로 구분하고 접근할 수 있습니다.

 

이것은 지구상에 수십억 명의 사람이 있고,

이들이 모두 사람이라는 하나의 분류에 속한다는 것을 떠올리면 이해하기 쉽습니다.

한국사람 A와 미국사람 B는 모두 동일한 사람 종 class에 속 합니다.

 

하지만 사람 A와 사람 B는 서로 구분되는 실체이기 때문에

람 A가 죽거나 사는 것은

사람 B에 어떠한 영향도 주지 않습니다.

+ Recent posts