객체 지향 프로그래밍의 상속과 다형성
Inheritance and polymorphism in object-oriented programming - Unity Learn
In this tutorial, you’ll learn about inheritance and polymorphism, two closely related pillars of OOP. Explain how inheritance is used to share functionality between a parent and child class Define the relationship between a parent and child class, inclu
learn.unity.com
Inheritance and polymorphism in object-oriented programming
상속과 다형성은 깊이 얽혀 있다.
상속은 서로 다른 개체 간의 부모(Parent) - 자식(Child) 관계에 중점을 둔다.
다형성은 상속의 결과이며 부모 클래스에서 상속한 것을 자식 클래스가 수정하는 프로세스
상속과 다형성을 함께 사용하면 응용 프로그램에서 작성해야 하는 코드의 양을 줄일 수 있다.
상속
상속은 다른 클래스(자식 클래스)를 만들 수 있는 기본 클래스(부모 클래스)를 만드는 프로세스이다.
자식 클래스 : 자동으로 부모 클래스의 모든 기능을 사용하거나 상속.
예) 적 클래스를 상속받는 개별 클래스
상속을 사용하면 개별 적 클래스에 대한 체력 및 피해 기능을 작성할 필요가 없으므로
각 클래스에 고유한 기능을 작성하는 데 집중할 수 있다.
예) 모든 핵심 Unity 스크립팅 기능이 상속되는 MonoBehaviour 기본 클래스
public class SomeClass : MonoBehaviour { }
MonoBehaviour가 없으면 OnTriggerEnter나 Start, Update를 사용할 수 없다.
다형성
부모 클래스에서 핵심 기능을 상속하는 것이 도움이 될 수 있지만
예) MonoBehaviour을 상속하는 Enemy 클래스를 상속하는 Thief 클래스.
public class Enemy : MonoBehaviour
{
public void DealDamage ()
{
Player.Health -= 10;
}
}
public class Thief : Enemy
{
private void Update()
{
if (Player.isSeen)
{
DealDamage(); // method from parent class can be called
}
}
}
다형성은 자식 클래스가 부모 클래스와 정확히 동일한 작업을 수행하는 것을 원하지 않는 상황에 쓰인다.
다형성은 부모 클래스에서 상속하는 기능을 변경할 수 있다.
상위 클래스에서 재정의하려는 메서드는 우선 재정의 대상(overriding)으로 표시되어야 한다.
이것은 가상 메서드(virtual method)로 만들어 수행된다.
예) 기본 클래스(Enemy) 상속하는 메서드를 virtual method로 만든다.
public class Enemy : MonoBehaviour {
public virtual void DealDamage () { // virtual keyword allows overriding
Player.Health -= 10;
}
}
이러한 변경은 메서드 재정의(method overriding)라고 하는 프로세스를 통해 수행된다.
예) virtual method인 DealDamage를 상속해 override method로 재정의한다.
public class Thief : Enemy
{
public override void DealDamage() // can override virtual methods from parent class
{
Player.Health -= 2;
CommitPettyTheft();
}
private void Update()
{
if (Player.isSeen)
{
DealDamage();
}
}
}
이제 Update에서 Thief 개체에 의해 DealDamage가 호출되면
상위 메서드 대신 사용자 정의된 DealDamage 메서드가 호출된다.
메서드를 가상으로 식별하는 것은 재정의할 수 있지만 재정의할 필요는 없음을 나타낸다.
Thief 자식 클래스에서만 DealDamage 메서드를 수정하고 다른 자식 클래스는 변경되지 않아야 하기에 이상적이다.
상속과 다형성은 궁극적으로 작성해야 하는 코드의 총량을 줄이는 데 도움이 되는 클래스 간의 상호 관계를 생성하는 데 도움이 됩니다.