C#_ Unity Game programming

C# 다형성과 업캐스팅 및 다운캐스팅

doyyy_0 2024. 1. 2. 12:21

| 다형성이란?

다형성(polymorphism)이란? 다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다. 

즉, 다시말해 한가지 형태로 여러가지 작업을 할수 있다는 뜻이다. C#에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있다.

 

|다형성의 두가지 특징

1) Up casting (업캐스팅)

부모 클래스의 참조변수로 자식 클래스의 객체를 참조할 수 있다.

객체를 생성할 때 객체(인스턴스)의 타입과 일치하는 타입의 참조변수를 사용하면 당연히 된다. 하지만 부모 클래스의 참조 변수로 자식 클래스의 인스턴스를 참조하도록 하는 것 또한 가능하다.

 

다음의 코드를 보자

 

class Animal
{
    public void sleep()
    {
        Debug.Log("동물이 자다");
    }
}

class Monkey : Animal
{
    public void sleep()
    {
        Debug.Log("원숭이가 자다");
    }
    
}





public class TestScript : MonoBehaviour
{
    Animal monkey = new Monkey();

    void Start()
    {
        Debug.log(monkey.sleep());
    }


}

 

이 때 부모 클래스의 참조변수로 자식클래스의 인스턴스에 접근하는 것이 가능하다. 하지만 

Monkey monkey  = new Animal();은 되지 않는다. 이유는 자식 인스턴스를 생성할 때는 부모 클래스와 자식클래스를 둘다 메모리에 올려 놓고, 부모 인스턴스를 생성할 때는 부모 클래스 즉 자기자신만 메모리에 올려놓기 때문이다. 따라서 부모 인스턴스를 생성할 때 자식 인스턴스를 참조하면 자식 클래스 즉, 없는 부분을 참조하려고 하기 때문에 에러가 생긴다.

 

 

2) down casting(다운캐스팅)

하지만 자식 인스턴스를 형 변환을 통해 자식 인스턴스에 부모 인스턴스가 접근할 수 있다. 

예를들어,

Monkey monkey = new Monkey();

Animal animal = (animal)monkey;

 

이렇게 자식 인스턴스를 부모 인스턴스로 형 변환을 하면 가능하다. 이게 바로 다운 캐스팅이다.