[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> 인터페이스를 구현해야 한다는 제약 조건을 나타냅니다.

결론

제네릭을 이용하여 비교 연산자를 오버로딩하면 다양한 형식에 대해 유연하게 동작하는 코드를 작성할 수 있습니다. 또한 제네릭을 활용함으로써 코드의 재사용성과 유지 보수성을 향상시킬 수 있습니다.

참고 자료