C#에서는 CompareTo() 메서드를 사용하여 두 개의 열거형(Enum) 값을 손쉽게 비교할 수 있습니다. 이 메서드는 IComparable 인터페이스를 구현하며, 호출한 인스턴스(원본)와 매개변수로 전달된 값(대상)을 비교한 결과를 정수 형태로 반환합니다.
반환값의 의미
CompareTo() 메서드는 비교 결과에 따라 다음 세 가지 값 중 하나를 반환합니다.
- 0보다 작은 값: 원본(source)의 값이 대상(target)의 값보다 작은 경우
- 0: 원본의 값과 대상의 값이 서로 같은 경우
- 0보다 큰 값: 원본의 값이 대상의 값보다 큰 경우
사용 예제
아래 예제에서는 제품별 재고량을 나타내는 열거형을 정의하고, CompareTo() 메서드로 Keyboard와 PenDrive의 재고 크기를 비교합니다.
using System;
class Program {
enum Products { HardDrive = 0, PenDrive = 4, Keyboard = 8 };
static void Main() {
Products prod1 = Products.HardDrive;
Products prod2 = Products.PenDrive;
Products prod3 = Products.Keyboard;
Console.WriteLine("Stock for {0} is more than {1}?", prod3, prod2);
Console.WriteLine("{0}{1}", prod3.CompareTo(prod2) > 0 ? "Yes" : "No", Environment.NewLine);
}
}실행 결과
Stock for Keyboard is more than PenDrive? Yes
코드 설명
열거형 Products는 각 멤버가 명시적으로 정수 값을 가지도록 선언되었습니다. HardDrive는 0, PenDrive는 4, Keyboard는 8의 값을 가집니다.
Main() 메서드 안에서 prod3.CompareTo(prod2)가 호출되면, Keyboard(8)와 PenDrive(4)를 비교하여 양수를 반환합니다. 반환값이 0보다 크므로 삼항 연산자(? :)에 의해 "Yes"가 출력됩니다.
이처럼 CompareTo() 메서드를 활용하면 열거형 멤버의 내부 정수 값을 기준으로 대소 관계를 간단하게 판단할 수 있으며, 조건문과 함께 사용하면 다양한 비교 로직을 깔끔하게 구현할 수 있습니다.