상속과 다형성에 대해 공부를 진행했다.
상속을 잘못 사용하는 복잡도를 높일 수 있다. 공통 기능이 아닌 개별 기능까지 부모 클래스에 포함시키면 코드가 불필요하게 복잡해질 수 있다.
또한 다형성 없는 코드 즉, 모든 객체를 독립적으로 처리하려고 하면 비슷한 로직을 반복해서 작성해야할 가능성이 높다. 중복 코드를 많이 생성하고 유지보수를 어렵게 만든다.
상속
다형성
상속은 객체 지향 프로그래밍의 핵심 원칙 중 하나로, 한 클래스의 속성과 메서드를 다른 클래스가 받아들이는 것을 말한다.
이렇게 함으로써 코드의 재사용성이 향상되고, 유지보수가 용이해진다.
다형성은 객체 지향 프로그래밍의 또 다른 핵심 원칙으로, 하나의 타입(클래스 또는 인터페이스 등)이 여러 형태로 동작하는 것을 말한다.
즉, 부모 클래스 타입의 참조 변수를 사용하여 자식 클래스의 인스턴스를 참조할 때, 오버라이딩된 메서드는 자식 클래스의 버전이 호출되는 등 같은 이름의 메서드가 서로 다른 클래스에서 서로 다르게 동작할 수 있다.
Unity와 C#에서는 인터페이스와 추상 클래스 등을 활용하여 다형성을 구현할 수 있다.
예를 들어, 게임 내에 여러 종류의 적들이 있다고 가정해본다.
각 적은 공격 방식은 달라도 모든 적들은 플레이어에게 피해를 줄 수 있는 공통적인 특징인 '공격' 기능을 가지고 있다.
csharp
public abstract class Enemy : MonoBehaviour
{
public abstract void Attack();
}
public class MeleeEnemy : Enemy
{
public override void Attack()
{
Debug.Log("Melee attack!");
// Implement melee attack here...
}
}
public class RangedEnemy : Enemy
{
public override void Attack()
{
Debug.Log("Ranged attack!");
// Implement ranged attack here...
}
}
위 코드에서 Enemy는 모든 적들의 공통적인 특징을 나타내는 추상 클래스다.
이 클래스를 상속받은 MeleeEnemy와 RangedEnemy 클래스는 각각 '근접 공격'과 '원거리 공격'을 구현한다.
이처럼 상속과 다형성을 활용하면, 동일한 인터페이스를 가지면서도 서로 다른 기능을 가진 여러 종류의 객체를 효율적으로 관리할 수 있다.
상속과 다형성은 객체 지향 프로그래밍의 중요한 원칙으로, 코드의 재사용성과 유연성을 높인다.
Unity에서 C#을 사용하여 게임 개발할 때에도 이 원칙들은 그대로 적용되며, 이를 통해 더 효율적이고 관리하기 쉬운 코드를 작성할 수 있다.