다형성과 제네릭은 C# 프로그래밍 언어에서 중요한 개념이며, 이 두 가지 기능은 코드의 유연성을 높이고 재사용성을 증가시키는 데 도움이 됩니다. 이번 글에서는 C#에서 다형성과 제네릭의 개념을 자세히 살펴보고, 이 두 가지가 어떻게 상호작용하는지에 대해 알아보겠습니다.
다형성(Polymorphism)
다형성은 객체 지향 프로그래밍에서 하나의 인터페이스를 통해 여러 가지 형태의 동작을 수행할 수 있는 능력을 의미합니다. C#에서는 다형성을 구현하기 위해 상속, 추상 클래스, 인터페이스 등의 기능을 제공합니다.
가상 메서드와 오버라이딩
가상 메서드를 사용하면 파생 클래스에서 해당 메서드를 오버라이딩하여 다른 동작을 구현할 수 있습니다. 다음은 가상 메서드의 예시입니다.
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Some sound");
}
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Bark");
}
}
class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Meow");
}
}
다형성을 통한 코드 재활용
이러한 다형성을 이용하면, 동일한 인터페이스를 가진 다양한 타입의 객체들을 모두 동일하게 다룰 수 있기 때문에 코드의 재활용성이 높아지고 유지 보수가 용이해집니다.
제네릭(Generic)
제네릭은 C# 2.0 이후 도입된 기능으로, 다양한 데이터 타입을 지원하는 클래스, 메서드 및 인터페이스를 작성할 수 있게 해줍니다. 이를 통해 컴파일 시에 타입 안전성을 보장하면서 코드의 재사용성을 높일 수 있습니다.
제네릭 클래스의 예시
다음은 제네릭 클래스의 예시입니다.
class GenericList<T>
{
private List<T> list = new List<T>();
public void Add(T value)
{
list.Add(value);
}
public T Get(int index)
{
return list[index];
}
}
이 예시에서 T
는 어떤 데이터 타입이든 될 수 있으므로, GenericList
클래스를 여러 가지 데이터 타입에 대해 다양하게 활용할 수 있습니다.
다형성과 제네릭의 상호작용
다형성과 제네릭은 서로 보완적인 개념으로, 코드의 재사용성과 유연성을 향상시키는 데 함께 활용될 수 있습니다. 예를 들어, 제네릭을 이용하여 다양한 데이터 타입을 다룰 수 있는 컨테이너를 만들고, 이에 다형성을 적용하여 다른 동작을 수행하는 객체들을 처리할 수 있습니다.
이러한 다형성과 제네릭의 상호작용을 통해, 재사용성이 높고 유연한 코드를 작성할 수 있으며, 코드의 일반화와 타입 안전성을 모두 확보할 수 있습니다.
이와 같이 C#에서의 다형성과 제네릭은 객체 지향 프로그래밍과 유연하고 안전한 코드 작성을 위한 중요한 도구로 활용됩니다.
그럼 이번 글은 여기서 마치도록 하겠습니다. 감사합니다.
참고 문헌:
- https://docs.microsoft.com/en-us/dotnet/csharp/
- https://www.tutorialspoint.com/csharp/