Dart에서 객체의 동등성을 비교하는 것은 중요한 작업입니다. 기본적으로 모든 객체는 == 연산자를 통해 동등성을 비교할 수 있으며, 이는 Object 클래스에 정의된 == 연산자를 오버라이드하여 사용자 정의 객체의 동등성 비교를 할 수 있습니다. 여기서는 Money 클래스를 예로 들어 Dart에서 객체 동등성을 어떻게 비교하는지 알아보겠습니다.
class Money {
final double amount;
final String currency;
const Money(this.amount, this.currency);
@override
bool operator ==(Object other) =>
other is Money && other.amount == amount && other.currency == currency;
@override
int get hashCode => Object.hash(amount, currency);
}
Money 클래스는 두 개의 final 필드, amount와 currency를 가지고 있습니다. 이 클래스는 금액과 화폐 단위를 나타내는 데 사용됩니다.
동등성 비교
동등성 비교를 위해 == 연산자를 오버라이드합니다. Dart에서는 객체의 동등성을 비교할 때 == 연산자를 사용하며, 이를 통해 객체의 필드 값이 같은지를 확인할 수 있습니다.
1. 매개변수 및 반환 타입
bool operator == (Object other) =>
bool operator: 이 메서드는 true 또는 false 값을 반환합니다.
Object other: 이 메서드가 받아들이는 매개변수로, 비교하려는 대상 객체입니다.
2. 타입 확인 및 필드 비교
other is Money && other.amount == amount && other.currency == currency
먼저 other 객체가 Money 타입인지 확인합니다. 만약 Money 타입이 아니라면 false를 반환합니다.
other 객체가 Money 타입이라면, amount 및 currency 필드의 값이 같은지를 비교합니다.
두 필드의 값이 모두 같으면 true, 하나라도 다르면 false를 반환합니다.
3. hashCode 오버라이드
hashCode는 객체의 해시 코드(고유값)를 반환합니다.
@override
int get hashCode => Object.hash(amount, currency);