[c#] 데코레이터와 상속의 차이

소프트웨어 개발에서 데코레이터와 상속은 코드 재사용과 확장성을 위한 두 가지 주요한 기술입니다. 각각의 접근 방식은 다른 방식으로 작동하며, 각각의 장단점이 있습니다.

상속

상속은 객체 지향 프로그래밍에서 기존 클래스를 확장하여 새로운 클래스를 만드는 방법입니다. 기존 클래스의 특징과 기능을 그대로 유지하면서 새로운 클래스에 새로운 특징과 기능을 추가할 수 있습니다. 이를 통해 코드의 재사용성을 높일 수 있습니다.

public class Animal
{
    public virtual void Speak()
    {
        Console.WriteLine("Generic animal sound");
    }
}

public class Dog : Animal
{
    public override void Speak()
    {
        Console.WriteLine("Woof!");
    }
}

위의 예시에서 Dog 클래스는 Animal 클래스를 상속받아 Speak 메서드를 재정의하여 고유한 기능을 추가하고 있습니다.

데코레이터

데코레이터는 객체에 동적으로 기능을 추가하는 디자인 패턴입니다. 상속과 달리 데코레이터는 객체에 기능을 추가하거나 확장합니다. 이는 객체의 기능을 계층적으로 쌓아 올릴 수 있어 유연한 확장이 가능합니다.

public interface IWeapon
{
    void Attack();
}

public class Sword : IWeapon
{
    public void Attack()
    {
        Console.WriteLine("Sword attack");
    }
}

public class EnchantedSword : IWeapon
{
    private readonly IWeapon _weapon;

    public EnchantedSword(IWeapon weapon)
    {
        _weapon = weapon;
    }

    public void Attack()
    {
        Console.WriteLine("Enchantment");
        _weapon.Attack();
    }
}

위의 예시에서 EnchantedSword 클래스는 IWeapon을 상속받지 않고, IWeapon을 구현한 데코레이터입니다.

결론

상속과 데코레이터는 코드 재사용과 유연한 확장성을 위한 다른 접근 방식을 제공합니다. 상속은 코드를 확장하여 새로운 클래스를 만들지만, 데코레이터는 객체의 동적인 기능 추가 및 확장을 제공합니다.

참고 문헌: