다형성(Polymorphism)
다형성은 하나의 인터페이스나 추상 클래스를 통해 여러 클래스를 이용할 수 있는 기능을 말합니다. 이를 통해 코드의 재사용성과 유지보수성이 개선됩니다. C#에서는 다형성을 구현하기 위해 인터페이스와 상속을 활용합니다.
인터페이스(Interfaces)
인터페이스를 사용하여 다형성을 구현할 수 있습니다. 인터페이스는 클래스가 구현해야 하는 메서드와 속성을 정의하여 일관된 동작을 보장합니다. 여러 클래스가 같은 인터페이스를 구현함으로써 각각의 클래스를 동일한 방식으로 다룰 수 있습니다.
public interface IShape
{
double CalculateArea();
}
public class Circle : IShape
{
public double Radius { get; set; }
public double CalculateArea()
{
return Math.PI * Radius * Radius;
}
}
public class Square : IShape
{
public double SideLength { get; set; }
public double CalculateArea()
{
return SideLength * SideLength;
}
}
위 예제에서 Circle
과 Square
클래스는 IShape
인터페이스를 구현하여 CalculateArea
메서드를 제공합니다.
상속(Inheritance)
상속을 이용하여 다형성을 구현할 수도 있습니다. 부모 클래스에서 정의한 메서드를 자식 클래스에서 오버라이딩하여 다양한 동작을 제공할 수 있습니다.
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Some sound");
}
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Woof");
}
}
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Meow");
}
}
위 예제에서 Animal
클래스를 상속받은 Dog
와 Cat
클래스는 부모 클래스의 MakeSound
메서드를 오버라이딩하여 각각의 소리를 출력합니다.
다형성 활용
인터페이스나 상속을 통해 다형성을 구현하면, 클라이언트 코드에서 각 객체를 일관된 방식으로 다룰 수 있습니다. 이를 통해 확장성이 높은 애플리케이션을 구축할 수 있습니다.
var shapes = new List<IShape> { new Circle(), new Square() };
foreach (var shape in shapes)
{
Console.WriteLine(shape.CalculateArea());
}
위 코드에서는 IShape
인터페이스를 구현한 Circle
와 Square
객체를 동일한 방식으로 다루고 있습니다.
결론
C#의 다형성을 활용하여 유연하고 확장 가능한 애플리케이션을 설계할 수 있습니다. 인터페이스와 상속을 적절히 활용하여 다형성을 구현하는 것이 중요합니다. 이를 통해 코드의 재사용성과 유지보수성을 향상시킬 수 있습니다.