dart 객체 동등성, deep copy

jokil·2023년 12월 7일
0

플러터

목록 보기
5/15

객체 동등성 이해하기
객체 동등성, 이건 뭘까? 두 객체가 서로 같은지 아닌지 판단하는 거다. 예를 들어, 같은 이름과 유통 기한을 가진 두 음식이 있다면, 이 둘을 같은 음식으로 볼까, 아닐까?

Flutter에서는 == 연산자와 hashCode 메서드를 오버라이드해서 이를 구현한다. Food 클래스 예시를 보자

class Food {
  String name;
  DateTime expiryDate;
  String description;

  Food({required this.name, required this.expiryDate, required this.description});

  
  bool operator ==(Object other) {
    if (identical(this, other)) return true;
    return other is Food &&
           other.name == name &&
           other.expiryDate == expiryDate;
  }

  
  int get hashCode => name.hashCode ^ expiryDate.hashCode;
}

Set에서 동일 객체로 판단하기
Set을 사용해보자 Set은 중복 없는 요소들을 저장한다. Food 객체를 Set에 넣을 때, 같은 이름과 유통 기한을 가진 음식들은 동일한 것으로 간주되어야 한다. 이렇게 하면 같은 음식이 여러 번 추가되는 걸 막을 수 있다.

컬렉션 정렬하기
음식들을 유통 기한 순으로 정렬해보자. compareTo 메서드를 사용해서 쉽게 할 수 있다. 아래 예시를 보자.

foods.sort((a, b) => a.expiryDate.compareTo(b.expiryDate));

/*
Deep Copy
깊은 복사(deep copy)에 대해 알아보자. 
Dart에서는 깊은 복사를 기본적으로 지원하지 않는다. 
복사본을 만들려면 copyWith 메서드를 구현해야한다.
*/

Food copyWith({
  String? newName,
  DateTime? newExpiryDate,
  String? newDescription,
}) {
  return Food(
    name: newName ?? this.name,
    expiryDate: newExpiryDate ?? this.expiryDate,
    description: newDescription ?? this.description,
  );
}
profile
주니어 개발자에서 점핑점핑

0개의 댓글