[Dart] ==연산자 와 hashCode 재정의

AsherKim·2023년 5월 30일
0

플러터 TIL

목록 보기
12/18

Dart에서 == 연산자는 두 객체의 동등성을 비교하는 데 사용된다. 기본적으로, == 연산자는 두 객체의 참조(메모리 주소)가 동일한지 여부를 비교한다. 즉, 객체의 레퍼런스가 같은 경우에만 true를 반환한다. 이는 Dart의 모든 클래스에서 상속되는 Object 클래스에 구현된 기본 동작이다.

그러나 클래스마다 객체의 동등성을 비교하는 방식이 다를 수 있으므로, 필요에 따라 == 연산자를 재정의할 수 있다. == 연산자를 재정의하면 객체의 내용을 기반으로 동등성을 판단할 수 있다.

== 연산자를 재정의하려면, 클래스에서 operator == 메서드를 재정의해야 한다. 이 메서드는 bool 값을 반환하며, 다음과 같은 형태로 구현될 수 있다.

class Person {
  String name;
  int age;

  Person(this.name, this.age);

  
  bool operator ==(Object other) {
    if (identical(this, other)) return true;

    return other is Person && name == other.name && age == other.age;
  }
}

Dart에서 hashCode 값을 재정의하는 방법을 보여준다. hashCode는 객체를 식별하는 정수 값이다. hashCode를 재정의하면 동일한 내용을 가진 객체들이 동일한 해시 코드를 가지게 된다. 이를 통해 해시 기반의 자료 구조에서 객체를 빠르게 찾을 수 있다.

hashCode를 재정의하려면 클래스에서 get hashCode 게터를 재정의해야 한다. 해당 게터는 int 값을 반환해야 하며, 일반적으로 객체의 필드를 이용하여 해시 코드를 계산한다.

아래 코드에서 get hashCode는 name.hashCode와 age.hashCode의 XOR 연산을 사용하여 해시 코드를 계산한다. name.hashCode는 name 문자열의 해시 코드를 반환하고, age.hashCode는 age 정수의 해시 코드를 반환한다. XOR 연산은 비트별로 다른 위치에 있는 비트를 1로 설정하므로, 두 해시 코드의 비트들을 조합하여 최종 해시 코드를 생성한다.

  
  int get hashCode {
    return name.hashCode ^ age.hashCode;
  }
profile
추리를 좋아하는 개발자

0개의 댓글