Dart/Flutter

[Dart/Flutter] bool operator == (Object other)이 뭘까요? (객체 동등성 비교)

Dart에서는 한번씩 bool operator == (object other)과 같은 코드가 보입니다. 이는 과연 무엇을 뜻하는 코드일까요?

이번 글에서는 Dart의 객체 동등성 비교를 알아봅니다!

 

Dart의 객체 동등성 비교

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);
  • Object.hash 메서드는 여러 필드를 받아 해시 코드를 생성합니다.
  • amount와 currency를 사용하여 고유의 해시 코드를 생성합니다.

예시

void main() {
  Money money1 = Money(100.0, 'USD');
  Money money2 = Money(100.0, 'USD');
  Money money3 = Money(200.0, 'EUR');

  print(money1 == money2); // true
  print(money1 == money3); // false
}
  • money1과 money2는 동일한 amount와 currency를 가지므로 == 연산자는 true를 반환합니다.
  • money1과 money3는 다른 값을 가지므로 == 연산자는 false를 반환합니다.

질문) 그럼 도대체 Dart에서 객체 동등성 비교를 쓰는 이유는 무엇일까요? 그냥 == 로 비교하면 안되나요?

답변) ‘==’연산자는 기본적으로 동일성 비교를 합니다. 즉, 두 객체가 메모리 상에서 동일한지 여부를 확인하는 것입니다.(메모리 주소 동일 여부 확인)

하지만 두 객체가 같은 메모리 주소를 가지지 않더라도, 그 객체들이 같은 데이터를 가지고 있으면 동일하다고 간주하고 싶을 때가 있습니다. 이럴 때 사용하는 것이 객체 동등성 비교입니다.

Info-Geon

Recent Posts

관절 건강에 좋다는 MSM의 모든 것

MSM은 건강 보조제로 널리 사용되며, 특히 관절 건강을 개선하고 통증을 완화하는 데 도움을 준다고 알려져…

3주 ago

칼슘 보충제 섭취 전 꼭 알아야 할 6가지 필수 정보

칼슘은 우리 몸에서 가장 풍부하게 존재하는 미네랄로, 전체 체중의 약 1-2%를 차지하며 주로 뼈와 치아에…

3주 ago

혈당과 체중 조절을 위해 주목받는 크롬 보충제의 모든 것

크롬은 필수 미량 원소 중 하나로, 인체 내에서 다양한 생화학적 반응에 관여하는 영양소입니다. 주로 혈당…

3주 ago

레시틴은 꼭 알아야 할 6가지 사실

레시틴은 자연적으로 나타나는 물질로, 대개 달걀 노른자, 콩, 해바라기 씨와 같은 식품에서 발견됩니다. 이 물질은…

3주 ago

L-글루타민, 운동 후 근육통과 면역력 저하를 겪고 있는 당신에게 추천하는 영양제

L-글루타민은 우리 몸에 존재하는 아미노산 중 하나로, 단백질 합성과 면역 기능에 중요한 역할을 합니다. 이천년대…

3주 ago

아스타잔틴, 심혈관 건강과 피부에 모두 도움이 된다?

아스타잔틴은 자연에서 발견되는 카로티노이드 계열의 강력한 항산화제입니다. 일반적으로 홍합, 새우, 그리고 특히 연어와 같은 해양…

3주 ago