본문 바로가기
카테고리 없음

[코딩일기] C# 상속

by mania2321 2024. 6. 26.

'Human', 'Student' 스크립트 2개 미리 생성

<Human 스크립트>

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

abstract public class Human : MonoBehaviour
{
    // public : 타 클래스에서 모두 사용 가능
    // protected : 상속 받은 자식 클래스에서만(여기서는 Human 클래스) 사용 가능
    protected string humanName;
    protected int humanAge;

    protected virtual void Info()  // 가상 함수. 자식 클래스에서 재정의 하고 싶을 때 virtual을 적어줌으로써 가상 함수를 만들어 준다. override 와 virtual이 함께 잘 쓰인다.
                                   // 자식클래스에서 override를 통해 추가 편집 가능 및 완성시킬 수 있음.
    {
        print("나는 어린이 입니다.");
    }

    // 자식 클래스에서 꼭 만들어야 하는 함수가 있음에도, 클래스 개수가 많아 누락시키는 경우, 부모 클래스에서 꼭 만들어라고 명시해주는 역할 => '추상 함수(abstract)'
    // 추상 함수는 자식 클래스에서 기능을 완성시켜야 되는 함수다. 
    // 가상 함수는, 부모 클래스에서 어느 정도 기능을 구현하고 자식 클래스에서 추가 편집 및 기능 완성을 구현하지만,
    // 추상 함수는, 아예 미완성인 상태로 남겨둔다. 완성은 무조건 자식 클래스에서 하도록 한다. 그래서 class에도 똑같이 abstract를 적어서 추상 클래스로 만들어줘야 된다.
    abstract protected void Name();
}

 

 

<Student 스크립트>

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Student : Human  // Human 스크립트를 상속받음(Human : 부모, Student : 자식)
{

    // Human 스크립트에 있는 humanName과 humanAge를 끌여다가 사용해보자.

    string schoolName;
    void Start()
    {
        schoolName = "수영초등학교";
        humanName = "LSB";
        humanAge = 13;

        Info();
    }

    protected override void Info()      // override = 재정의. 상속을 당하는 함수는 virtual이어야 한다.
    {
        base.Info();        // base가 가리키는건 부모 클래스. 즉, Human의 Info를 가리키는 것.
        print("나는 학생입니다.");     // Human에서의 Info는, "나는 어린이 입니다."였는데, 상속을 이용하여 "나는 학생입니다."로 재정의 함.
    }

    protected override void Name()
    {
        print(humanName);
    }
}

댓글