객체 지향의 개념
객체 지향이란 프로그래밍 패러다임 중 하나이다. 기존에는 프로그램을 명령어의 모음으로 인식했으며, 명령어의 순서에 초점을 맞춘 절차지향 프로그래밍이 사용되었다. 그러나 객체지향은 프로그램을 독립된 단위인 객체들과, 각 객체들 간의 상호작용에 초점을 맞춘다.
클래스
클래스는 객체 지향 프로그래밍에서 객체의 상태를 나타내는 멤버 변수와 객체와 관련 있는 함수인 메소드로 이루어진 일종의 설계도이다. 인스턴스는 클래스로부터 만들어진 실체이며, 각 멤버변수가 실제로 값을 가진다. 클래스의 속성 중 일부를 상속받는 서브 클래스를 가질 수 있으며, 자신은 그 서브클래스에 대해 수퍼 클래스가 된다.
메소드
메소드(멤버 함수)는 객체와 관련된 클래스 내에 정의된 함수이며, 멤버 변수에 접근 권한을 갖는다. 생성된 인스턴스가 갖고 있는 인스턴스 변수에 접근하는 메소드를 인스턴스 메소드라고 한다. 인스턴스 메소드는 인스턴스를 생성해야만 만들어지고, 호출할 수 있게 된다. 모든 인스턴스가 공유하는 클래스 메소드에 접근하는 메소드를 클래스 메소드라고 한다. 클래스 메소드는 인스턴스의 생성 없이도 호출이 가능하다.
접근제한
객체 지향에서 정보 은닉은 중요한 개념이다. 클래스 외부에서 접근할 필요가 없는 정보는 외부로부터의 접근을 제한함으로써 객체 간의 결합도를 약화시켜 유연성을 확보할 수 있다. 각 언어에서 제공하는 접근 제어사를 이용해 어떤 멤버에 대한 외부의 접근을 허용하거나 차단할 수 있다. private 멤버는 해당 멤버를 선언한 클래스의 멤버만 접근이 가능하며, public 멤버는 프로그램 어디에서나 접근할 수 있다. protected 멤버는 이 멤버를 선언한 클래스의 멤버, 이 멤버를 선언한 클래스가 속한 패키지의 멤버, 이 멤버를 선언한 클래스를 상속받은 서브 클래스의 멤버가 접근할 수 있다.
상속
클래스 간의 관계는 상속 관계와 포함 관계가 있다. 상속해주는 클래스를 수퍼 클래스, 상속받는 클래스를 수퍼 클래스의 서브 클래스라고 하며, 이 클래스들의 관계를 상속 관계에 있다고 한다. 서브 클래스는 수퍼 클래스에 있는 멤버가 자동으로 추가된 것과 같은 효과를 얻는다. 어떤 클래스를 상속받을 때, 그 클래스에 선언된 멤버뿐만 아니라 그 클래스가 상속받은 멤버를 모두 상속받는다. 수퍼 클래스 A, 서브 클래스 B가 있다고 할 때 “B는 A이다.”라는 문장이 성립해야 한다. 포함 관계는 클래스가 다른 클래스를 포함하는 관계이다. 한 클래스의 멤버 변수로 다른 클래스의 인스턴스를 가지면서 만들어진다. 포함 관계는 합성 관계(강한 관계)와 집합 관계(약한 관계)로 구분된다. 상속과 포함을 통해 클래스의 재사용성을 높여 중복 작업을 줄일 수 있으며, 일관성을 유지하기 쉬워진다.
유니티 게임 오브젝트
게임 오브젝트는 캐릭터, 소품, 건물뿐만 아니라 광원, 카메라 등을 포함한 게임을 구성하는 모든 요소이다. 유니티에서 모든 게임 오브젝트들은 GameObject라는 타입의 변수이며, 해당 오브젝트의 속성인 컴포넌트들을 담는 컨테이너라 할 수 있다.
컴포넌트
컴포넌트는 게임 오브젝트를 이루는 조각들이다. 게임 오브젝트에 Transform 컴포넌트를 붙여 크기, 위치, 회전 정보를 지정할 수 있고, Box Collider 컴포넌트를 붙여 다른 물체와 부딪힐 수 있는 물리적 표면을 만들 수 있으며, Light 컴포넌트를 붙여 광원으로 사용할 수 있다. 기본으로 제공하는 컴포넌트 외에도 커스텀 컴포넌트인 C# 스크립트를 만들어 붙일 수 있다.