본문 바로가기
개발/기본) 기본기

기본기).Net) IEquatable <T> 비교

by 테샤르 2022. 10. 13.

IEquatable <T> 

 

해당 인터페이스는 같음을 비교하는 인터페이스로 

.Equls(Object)의 형태로 동등한지 비교하는 메소드이다.

 

반응형

비교하는 과정에서 Value Type의 값이 들어가면 Boxing 현상이 이뤄진다고 한다.

IEquatable Generic Type으로 정의하고 난 이후에 필요한 타입에 따라 대응하면 해상 상황(Boxing- UnBoxing)을 피할수 있다.

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public class Person : IEquatable<Person>
{
   private string uniqueSsn;
   private string lName;

   public Person(string lastName, string ssn)
   {
      if (Regex.IsMatch(ssn, @"\d{9}"))
        uniqueSsn = $"{ssn.Substring(0, 3)}-{ssn.Substring(3, 2)}-{ssn.Substring(5, 4)}";
      else if (Regex.IsMatch(ssn, @"\d{3}-\d{2}-\d{4}"))
         uniqueSsn = ssn;
      else
         throw new FormatException("The social security number has an invalid format.");

      this.LastName = lastName;
   }

   public string SSN
   {
      get { return this.uniqueSsn; }
   }

   public string LastName
   {
      get { return this.lName; }
      set {
         if (String.IsNullOrEmpty(value))
            throw new ArgumentException("The last name cannot be null or empty.");
         else
            this.lName = value;
      }
   }

   public bool Equals(Person other)
   {
      if (other == null)
         return false;

      if (this.uniqueSsn == other.uniqueSsn)
         return true;
      else
         return false;
   }

   public override bool Equals(Object obj)
   {
      if (obj == null)
         return false;

      Person personObj = obj as Person;
      if (personObj == null)
         return false;
      else
         return Equals(personObj);
   }

   public override int GetHashCode()
   {
      return this.SSN.GetHashCode();
   }

   public static bool operator == (Person person1, Person person2)
   {
      if (((object)person1) == null || ((object)person2) == null)
         return Object.Equals(person1, person2);

      return person1.Equals(person2);
   }

   public static bool operator != (Person person1, Person person2)
   {
      if (((object)person1) == null || ((object)person2) == null)
         return ! Object.Equals(person1, person2);

      return ! (person1.Equals(person2));
   }
}

 

Microsoft IEquatable <T> 인터페이스 : [링크]

 

IEquatable<T> 인터페이스 (System)

값 형식 또는 클래스에서 인스턴스의 같음을 결정하는 형식별 메서드를 만들기 위해 구현하는 일반화된 메서드를 정의합니다.

learn.microsoft.com

iEquatable 예시 코드 : [링크]

 

IEquatable<T>.Equals(T) Method (System)

Indicates whether the current object is equal to another object of the same type.

learn.microsoft.com

 

★☆☆☆☆

 

반응형

댓글