
C#에서는 구조체와 클래스라는 사용자 정의 자료형이 있다.
이는 처음에는 비슷하게 보일 수 있지만 서로 메모리, 복사, 성능에서 다르게 작동한다.
구조체는 값타입으로 스택 영역에 저장된다.
또한 상속이 불가능하며 생성자에는 매개변수가 필요하다.
복사 시 값으로 복사된다.
유니티에서 구조체는 다음과 같은 예시가 있다.
구조체는 복사가 빠른 장점이 있으나 너무 자주 복사 되면 성능이 떨어진다.
구조체는 생성시 new를 필요하지않지만 모든 필드를 초기화 할 필요가 있다.
그렇기에 생성자는 매개변수가 필요하며 필드를 초기화 시켜야한다.
유니티에서 Vector를 int등과 같이 선언과 할당 할 수 없는 이유는 멤버를 초기화하기 위해서이다.
클래스는 참조타입으로 힙에 저장된다.
또한 상속이 가능하지만 두 클래스를 동시에 상속 받을 순 없다.
생성자의 형식에는 제한이 없다.
참조 타입으로 복사 시 얇은 복사로 복사 된다.
유니티에서는 클래스는 다음과 같은 예시가 있다.
클래스는 생성과 상속이 유연하단 장점이 있지만 할당과 해제에 가비지 컬렉터 비용이 발생한다.
클래스는 생성시 반드시 new를 사용해 생성해야한다.
선언시 힙에 할당되며 생성자가 실행 되어 인스턴스가 생성된다.
개별 클래스에서는 매겨변수가 없는 기본생성자, 다양한 생성자를 정의할 수 있다.
하지만 MonoBehavior는 생성자를 선언하거나 new를 이용해 객체를 만들 순 없다.
유니티에서는 AddComponent<>()나 프리팹을 Instantiate()등으로 프리팹을 생성하여 MonoBehavior 객체를 생성한다.