Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# SByte.Equals() 메서드 완벽 정리: 문법과 예제 코드

C#의 SByte.Equals() 메서드는 현재 인스턴스가 지정된 개체(Object) 또는 SByte 값과 같은지 여부를 나타내는 값을 반환하는 데 사용됩니다. 이 글에서는 Equals() 메서드의 두 가지 오버로드 형태와 실제 동작 방식을 예제 코드를 통해 자세히 살펴보겠습니다.

문법(Syntax)

SByte.Equals() 메서드는 두 가지 오버로드 버전을 제공합니다.

public bool Equals (sbyte ob);
public override bool Equals (object ob);

첫 번째 문법의 ob 매개변수는 현재 인스턴스와 비교할 SByte 값을 나타내며, 두 번째 문법의 ob 매개변수는 현재 인스턴스와 비교할 개체(Object)를 나타냅니다.

주요 특징

  • Equals(sbyte): 부호 있는 8비트 정수인 sbyte 타입끼리 직접 비교하므로 값이 같으면 true를 반환합니다.
  • Equals(object): 박싱(boxing)된 개체와 비교할 때 사용되며, 타입까지 일치해야 true를 반환합니다. 예를 들어 sbyte 값과 int 값이 박싱된 개체는 숫자 값이 같더라도 타입이 다르면 false를 반환합니다.

예제 1: sbyte 값끼리 비교하기

다음 예제에서는 두 개의 sbyte 변수를 Equals() 메서드로 비교하고, 추가로 CompareTo() 메서드를 활용해 크기 관계도 확인합니다.

using System;
public class Demo {
   public static void Main() {
      sbyte s1 = 10;
      sbyte s2 = 100;
      Console.WriteLine("Value of S1 = "+s1);
      Console.WriteLine("Value of S2 = "+s2);      
      Console.WriteLine("Is s1 and s2 equal? = "+s1.Equals(s2));
      int res = s1.CompareTo(s2);
      if (res > 0)
         Console.WriteLine("s1 > s2");
      else if (res < 0)
         Console.WriteLine("s1 < s2");
      else
         Console.WriteLine("s1 = s2");
   }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Value of S1 = 10
Value of S2 = 100
Is s1 and s2 equal? = False
s1 < s2

s1(10)과 s2(100)는 서로 다른 값이므로 Equals() 메서드가 false를 반환하고, CompareTo() 메서드의 결과값이 음수이므로 "s1 < s2"가 출력되는 것을 확인할 수 있습니다.

예제 2: sbyte와 Object 타입 비교하기

이번에는 sbyte 값과 object 타입으로 박싱된 값을 비교하는 예제입니다.

using System;
public class Demo {
   public static void Main() {
      sbyte s1 = 10;
      object s2 = 10;
      Console.WriteLine("Value of S1 = "+s1);
      Console.WriteLine("Value of S2 = "+s2);
      Console.WriteLine("Is s1 and s2 equal? = "+s1.Equals(s2));
   }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Value of S1 = 10
Value of S2 = 10
Is s1 and s2 equal? = False

결과 분석

흥미롭게도 두 값 모두 10으로 동일하지만 결과는 false입니다. 그 이유는 변수 s2에 저장된 값이 object 타입으로 박싱될 때 기본적으로 int 타입으로 처리되기 때문입니다. Equals(object) 메서드는 값뿐만 아니라 타입까지 일치해야 true를 반환하므로, sbyte와 int는 값이 같아도 타입이 달라 false가 반환됩니다.

만약 이 경우 true를 얻으려면 s2를 명시적으로 sbyte로 선언하거나 캐스팅하여 비교해야 합니다. 이처럼 C#에서 값 타입을 비교할 때는 박싱과 타입 불일치 문제를 항상 염두에 두어야 합니다.

정리

SByte.Equals() 메서드는 sbyte 타입 간의 동등성 비교에 유용하게 사용할 수 있으며, 특히 Equals(object) 오버로드를 사용할 때는 비교 대상의 실제 런타임 타입이 일치하는지 반드시 확인해야 합니다. 값이 같아도 타입이 다르면 false가 반환된다는 점을 기억하면 의도하지 않은 버그를 예방할 수 있습니다.