본문 바로가기
  • 불확실한 내일을 위해
유니티 C#/C#

C#기초 - 콜론(:)을 통한 상속(inheritance) 기능 사용

by 그린초코 2023. 5. 14.

상속(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

 

C#기초 get과 set 접근자의 사용

get 접근자는 해당 필드에 접근하는 역할을 하고 set 접근자는 해당 필드의 값을 설정한다. 접근제한자 데이터형 속성의이름 { get { return 필드명; } set { 필드명 = value; } } 예시를 들면 using System.Colle

greenchoco.tistory.com

위와 같은 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

댓글