객체 비교와 객체 동등성 재정의
- 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;
}
실행 결과_______
'Flutter > 심화 버전' 카테고리의 다른 글
[Flutter] 심화 버전 - 해시 함수 (0) | 2024.11.22 |
---|---|
[Flutter] 심화 버전 - 가변 객체 -> 불변 객체 (0) | 2024.11.22 |
[Flutter] 심화 버전 - 불변 객체 (0) | 2024.11.22 |
[Flutter] 심화 버전 - 가변 객체 (0) | 2024.11.22 |
[Flutter] 심화 버전 - 객체 (0) | 2024.11.22 |