유니티에서 상속자가 보이는데 상속자는 무엇일까?
상속자는
부모 클래스(기본 클래스)의 기능을 물려받아 확장하는 자식 클래스(파생 클래스)를 의미한다.
쉽게 말하면, 부모 클래스에서 기본적인 기능을 정의해 두고, 자식 클래스에서 그대로 사용하거나, 필요에 따라 변경할 수 있다.
EX)
// 부모 클래스
public class Animal
{
public void Eat()
{
Debug.Log("Animal is eating.");
}
}
// 자식 클래스
public class Dog : Animal //부모로부터 상속
{
public void Bark()
{
Debug.Log("Dog is barking.");
}
void Start()
{
Dog myDog = new Dog(); // 새로운 Dog 객체 생성
myDog.Eat(); // 부모 클래스에서 물려받은 Eat 메서드 호출
myDog.Bark(); // 자식 클래스에서 정의한 Bark 메서드 호출
}
}
코드 재사용 : 부모 클래스에서 정의한 기능을 자식 클래스가 상속받아 사용하기 때문에 코드의 중복을 줄일 수 있다.
다형성 : 상속을 통해 부모 클래스 타입의 변수로 자식 클래스 객체를 다룰 수 있다.
유지보수 용이 : 수정할 부분이 부모 클래스에만 집중되어 유지보수가 용이하다.
new는 객체(object)를 생성하는 키워드다.
클래스나 구조체의 인스턴스를 메모리에 할당하고, 그 객체를 초기화하는 역할한다.
new 키워드 특징

일반 클래스(MonoBehaviour를 상속받지 않은 클래스)를 만들 때 사용한다.
public class Dog
{
public string name;
public void Bark()
{
Debug.Log(name + "이(가) 짖는다!");
}
}
void Start()
{
Dog myDog = new Dog(); // new 키워드로 생성
myDog.name = "뽀삐";
myDog.Bark(); // "뽀삐가 짖는다!"
}
스크립트에서 자주 보이는 MonoBehaviour는 모든 Unity 스크립트가 파생되는 기본 클래스다. Unity에서 C# 스크립트를 생성하면 자동으로 상속한다.
(유니티의 "컴포넌트"가 될 수 있는 기본 클래스)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
기본 스크립트
MonoBehaviour의 생명주기

유니티의 공식 매뉴얼에 따르면 이렇게 수많은 함수 종류와
각각 호출 되는 시점을 알 수 있다.
MonoBehaviour의 특징
유니티의 게임 오브젝트에 추가해서 사용해야 한다.
Update(), Start(), Awake() 같은 유니티 생명 주기 함수 사용 가능하다.
GameObject, Transform 같은 유니티 관련 기능 사용 가능하다.
new 키워드로 생성할 수 없고, AddComponent<>()를 사용해야 한다.
public class Character : MonoBehaviour
{
public string name;
public int health = 100;
public void TakeDamage(int damage)
{
health -= damage;
Debug.Log(name + ": " + damage + "피해 입음. 남은 체력: " + health);
}
수정 중
/*void Start()
{
GameObject object = new GameObject("캐릭터 오브젝트"); // GameObject를 통해 새 게임 오브젝트 생성
Character myCharacter = object.AddComponent<Character>(); // 컴포넌트 추가
myCharacter.name = "유니티";
myCharacter.TakeDamage(20);
}*/
}
생성 방법 : new MyClass();
유니티 함수 (Start, Update 등) : 없음
Transform, GameObject 접근 : 불가능
어디에서 사용? : 일반 C# 클래스
생성 방법 : gameObject.AddComponent<>();
유니티 함수 (Start, Update 등) : 가능
Transform, GameObject 접근 : 가능
어디에서 사용? : 유니티 컴포넌트
오브젝트, UI, 물리, 카메라 등을 다뤄야 하면 MonoBehaviour를 사용하고,
단순한 데이터나 로직만 필요하면 new 키워드를 넣은 클래스를 사용해야 한다