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;
이렇게 자식 인스턴스를 부모 인스턴스로 형 변환을 하면 가능하다. 이게 바로 다운 캐스팅이다.