유니티(Unity)에서 new 키워드를 사용하는 이유는 객체 지향 프로그래밍(OOP)의 핵심 원리 중 하나인 인스턴스화를 구현하기 위함입니다. new 키워드는 새로운 객체를 생성하고, 해당 객체의 메모리를 할당하는 데 사용됩니다.
메모리와 객체 생성
프로그래밍에서 메모리는 작업 공간으로 이해할 수 있습니다. 이 작업 공간에 데이터를 저장하고, 필요할 때마다 접근하여 사용합니다. new 키워드의 사용은 메모리 상에 새로운 객체, 즉 인스턴스를 생성한다는 의미입니다. 예를 들어, Dog라는 클래스의 인스턴스를 생성하기 위해 new Dog()라고 작성하면, 유니티는 메모리 상에 Dog 객체를 위한 공간을 할당하고, 그 객체를 사용할 수 있게 됩니다. 이 과정에서 dog라는 변수에 객체의 메모리 주소가 저장되며, 이 변수를 통해 객체에 접근할 수 있습니다.
기본형 타입과 참조형 타입
프로그래밍 언어는 크게 기본형 타입(primitive types)과 참조형 타입(reference types)으로 데이터 타입을 구분합니다. int, float와 같은 기본형 타입은 new를 사용하지 않아도 자동으로 지역 메모리에 할당되며, 이들은 값 자체를 저장합니다. 반면, Dog와 같은 사용자 정의 타입은 참조형 타입에 속하며, 이 경우 new를 사용하여 명시적으로 메모리에 할당해야 합니다. 참조형 타입은 메모리 상의 객체에 대한 참조, 즉 주소를 저장합니다.
기본형 타입 예시 (C#)
코드에서 int와 float는 기본형 타입으로, 변수 number와 rate에 각각의 값이 직접 저장됩니다. 여기서 new 키워드는 필요하지 않습니다.
int number = 10;
float rate = 5.5f;
참조형 타입 예시 (C#)
여기서 Dog는 사용자가 정의한 클래스이며, new Dog()를 통해 Dog 타입의 객체를 메모리에 할당하고, myDog 변수에 그 주소를 저장합니다. 이를 통해 myDog 변수를 사용하여 Dog 객체에 접근할 수 있습니다.
Dog myDog = new Dog();
Static 멤버와 메모리 할당
클래스 내의 메서드나 변수가 static으로 선언된 경우, 이들은 프로그램 시작 시 자동으로 메모리에 할당됩니다. 이는 Dog.Bark()와 같이 타입 이름만으로 해당 메서드를 호출할 수 있음을 의미합니다. static 멤버는 클래스의 인스턴스가 아니라 클래스 자체에 속하며, 모든 인스턴스가 공유하는 하나의 공간에 할당됩니다.
Static 멤버 예시 (C#)
예제에서 Bark 메서드는 static으로 선언되어 있기 때문에, Dog 클래스의 인스턴스를 생성하지 않고도 Dog.Bark()를 호출할 수 있습니다.
public static void Bark()
{
Debug.Log("Woof!");
}
void Start()
{
Dog.Bark(); // 인스턴스 생성 없이 직접 호출
}