Flutter/심화 버전

[Flutter] 심화 버전 - 객체 동등성 재정의

미로910 2024. 11. 22. 17:29

객체 비교와 객체 동등성 재정의

  • Dart에서는 기본적으로 객체를 비교할 때 주소 값으로 비교 처리를 합니다.
  • flutter에서 동일한 위젯을 재사용할 수 있다면 이미 만들어진 객체를 재사용하여 메모리 낭비를 줄일 수 있습니다.
  • 객체 동등성 재정의 : 메서드를 재정의하여 객체를 비교할 때 논리적 동등성(내용 기반 비교)을 구현하는 것을 의미합니다.

hashCode, operator를 재정의 해야 합니다.

void main(){
  // 객체 비교와 객체 동등성 재정의
  // Dart 에서는 기본적으로 객체를 비교할 때 주소값으로 비교 처리
  // 플러터에서 동일한 위젯을 재사용할 수 있다면 이미 만들어진 객체를
  // 재사용하여 메모리 낭비를 줄일 수 있다.

  // const Container(), const Container(),

  var a = Object();
  var b = Object();
  // identical(a, b) 함수는 객체가 도일한 메모리를 참조하지 판별하는 기능 입니다.
  bool result = identical(a, b);
  print(result);

  print('----------------------');
  print(Book('다트') == Book('다트')); // <-- 논리적으로 같은 객체라고 판별하고 싶다면 동등성 재정의가 필요


}

class Book{
  String title;
  Book(this.title);

  // hashCode, operator 를 재정의 해야 한다.
  @override
  bool operator ==(Object other) {
    // 새로운 함수 확인 : identical() 함수는 두 객체를 메모리상에 동일한 주소인지 비교
    return identical(this, other)
    || other is Book
            && this.runtimeType == other.runtimeType
            && this.title == other.title;
  }

  // 인스턴스 객체를 고유한 정수 값으로 변경 처리
  @override
  int get hashCode => title.hashCode;

}

실행 결과_______