플러터(Flutter) 앱을 개발하다 보면 객체 간의 동등성(equality) 및 해시(hash) 관련 작업이 필요한 경우가 있습니다. Equatable과 Hashable은 이러한 작업을 간편하게 처리할 수 있는 도구입니다. 이 두 가지의 관계에 대해 알아보겠습니다.
Equatable
Equatable은 동일성(Equality)을 비교하기 위한 인터페이스입니다. 이를 사용하면 객체의 속성 값을 기반으로하여 동등성을 비교할 수 있습니다. 이를 위해 Equatable 믹스인(mixin)을 사용하여 객체 클래스에 ==
연산자 오버로딩을 구현할 수 있습니다. Equatable을 사용하면 객체 간의 값 비교가 간단해지며, 테스트 코드 작성이 용이해집니다.
class Person with Equatable {
final String name;
final int age;
const Person(this.name, this.age);
@override
List<Object> get props => [name, age];
}
위의 예시에서 props
메서드는 Equatable 믹스인으로부터 상속된 메서드로, 객체의 속성을 반환합니다. Equatable을 통해 props
메서드를 구현하면 해당 속성을 기반으로 객체가 동등한지 비교할 때 사용됩니다.
Hashable
Hashable은 해시 충돌을 최소화하기 위해 객체의 해시 값을 가져오기 위한 프로토콜입니다. Equatable과 마찬가지로, Hashable을 사용하여 객체의 속성을 기반으로하여 해시 값을 쉽게 생성할 수 있습니다.
class Person with Equatable implements Hashable {
final String name;
final int age;
const Person(this.name, this.age);
@override
List<Object> props => [name, age];
@override
int get hashCode => hashList(props);
}
위의 예시에서 hashList
함수를 사용하여 props
메서드에서 반환된 속성들을 이용하여 해시 값을 생성하고 있습니다.
이처럼 Equatable과 Hashable은 객체 간의 동등성 및 해시 관련 작업을 쉽게 처리할 수 있도록 도와줍니다. 플러터 앱을 개발하는 과정에서 이를 적극적으로 활용하여 효율적인 코드를 작성할 수 있습니다.
이상으로, 플러터에서의 Equatable과 Hashable의 관계에 대해 살펴보았습니다.