[c#] 제네릭을 이용한 비교 연산자 오버로딩
목차
개요
C#에서는 클래스나 구조체의 비교 연산자(<
, <=
, ==
, !=
, >=
, >
)를 오버로딩할 수 있습니다. 그러나 이러한 연산자를 오버로딩할 때 매개변수의 형식을 제한하고 싶을 때 제네릭을 사용할 수 있습니다. 제네릭을 이용하면 여러 형식에 대해 비교 연산자를 오버로딩하고 재사용할 수 있어 유용합니다.
비교 연산자 오버로딩
비교 연산자를 오버로딩할 때, public static
으로 선언하고 operator
키워드를 사용하여 해당 연산자를 표현합니다. 예를 들어, ==
연산자를 오버로딩할 때는 다음과 같이 작성할 수 있습니다.
public static bool operator ==(T x, T y)
{
// 비교 연산 로직
}
여기서 T
는 오버로딩되는 비교 연산자를 포함하는 클래스나 구조체를 나타냅니다.
제네릭을 이용한 구현
제네릭을 이용하여 비교 연산자를 오버로딩하기 위해서는 where
제약을 사용하여 특정 형식에 대한 제약 조건을 지정할 수 있습니다.
public static bool operator ==(T x, T y) where T : IComparable<T>
{
return x.CompareTo(y) == 0;
}
위의 코드에서 where T : IComparable<T>
부분은 T
형식이 IComparable<T>
인터페이스를 구현해야 한다는 제약 조건을 나타냅니다.
결론
제네릭을 이용하여 비교 연산자를 오버로딩하면 다양한 형식에 대해 유연하게 동작하는 코드를 작성할 수 있습니다. 또한 제네릭을 활용함으로써 코드의 재사용성과 유지 보수성을 향상시킬 수 있습니다.
참고 자료
- Microsoft Docs. “Constraints on type parameters (C# Programming Guide)” https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters