상속(Inheritance)이란, 어떤 클래스를 물려받는 것으로 중복 입력을 피할 때 사용하는 기능이다.
예를 들어 아래와 같은 클래스 Homan 을 만들었다고 치자
class Human
{
public string name;
public int age;
public float height;
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public float Height
{
get { return height; }
set { height = value; }
}
public Human(string _name, int _age, float _height)
{
name = _name;
age = _age;
height = _height;
}
public void Eat()
{
Debug.Log("eat");
}
public void Walk()
{
Debug.Log("walk");
}
public void Sleep()
{
Debug.Log("sleep");
}
}
(참고로 접근자 get 과 set은 아래 내용 참고)
https://greenchoco.tistory.com/140
위와 같은 Human 클래스를 만들었고 내용이 같은 Adult 클래스와 baby 클래스를 만들려고 할 때 위와 같은 내용을 또 쓰지 말고 콜론(:)을 이용하여 아래와 같이 작성하면 된다.
class Adult : Human
{
public Adult(string _name, int _age, float _height) : base(_name, _age, _height) { }
}
class Baby : Human
{
public Baby(string _name, int _age, float _height) : base(_name, _age, _height) { }
}
이렇게 작성하면 Adult와 Baby 클래스는 상속(inheritance)을 이용해 Human의 멤버를 그대로 물려받아 똑같은 코드를 작성할 필요가 없다. 이때 Human 클래스를 부모 클래스, Adult와 Baby는 자식 클래스라고 할 수 있다.
* 참고로 base 키워드는 생성된 객체의 부모 클래스의 멤버에 접근할 수 있게 해준다. 위에서 부모 클래스의 생성자를 호출하여 생성자의 매개변수인 _name, _age, _height 를 각각 base 생성자의 인수로 전달해 base 생성자를 호출한 것이다.
정리해서 한번에 써보면 아래와 같다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
class Human
{
public string name;
public int age;
public float height;
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public float Height
{
get { return height; }
set { height = value; }
}
public Human(string _name, int _age, float _height)
{
name = _name;
age = _age;
height = _height;
}
public void Eat()
{
Debug.Log("eat");
}
public virtual void Walk()
{
Debug.Log("walk");
}
public void Sleep()
{
Debug.Log("sleep");
}
}
public class test : MonoBehaviour
{
void Start()
{
Adult john = new Adult("john", 28, 173);
Baby lisa = new Baby("lisa", 3, 95);
Debug.Log(john.age);
lisa.Sleep();
}
class Adult : Human
{
public Adult(string _name, int _age, float _height) : base(_name, _age, _height) { }
}
class Baby : Human
{
public Baby(string _name, int _age, float _height) : base(_name, _age, _height) { }
}
}
결과 : 28, sleep
참고로 항상 기본적으로 적혀있는 MonoBehaviour 클래스는 게임 오브젝트를 구성할 때 기본 기능을 멤버 변수와 멤버 메서드로 준비한 클래스로, 게임 오브젝트에 붙여 실행하는 스크립트는 MonoBehaviour 클래스를 상속해야 한다.
728x90
'유니티 C# > C#' 카테고리의 다른 글
C#기초 - Rotate와 Translate 메서드 뜻 및 예시 (0) | 2023.07.06 |
---|---|
C#기초 - 벡터 사용법 (Vector3, Vector2) (0) | 2023.05.14 |
C#기초 - get과 set 접근자의 사용 (0) | 2023.05.14 |
C#기초 - 클래스 사용법 (0) | 2023.05.11 |
C#기초 - MonoBehaviour 뜻 (0) | 2023.05.11 |
댓글