Freezed로 생성한 클래스에 메서드를 추가하려면 private
생성자를 추가해야 한다.
@freezed
class MyModel with _$MyModel {
const factory MyModel({
@Default('') String a,
@Default('') String b,
}) = _MyModel;
const MyModel._(); // 사용자 정의 메서드를 위한 프라이빗 생성자
// 메서드 추가
num getMyModelByA(String a) {
// ...
}
// ... 기존 코드 유지
}
private 생성자가 직접 사용되지는 않지만 Freezed의 코드 생성 과정에서 필요하다고 한다. 실제로 프라이빗 생성자가 없다면 The non-abstract class _$_Person is missing implementations for these members:
에러를 마주할 수 있다.
Freezed는 코드 생성시 2가지 방식으로 작동할 수 있다.
- implementation: Freezed의 기본 방식. Freezed는 추상 클래스를 구현한다. 이 방식에서는 클래스의 타입만 상속되고 메서드나 프로퍼티는 상속되지 않는다.
- extension:
private
생성자를 추가하면 Freezed는 클래스를extends
한다. 이 방식에서는 모든 메서드와 프로퍼티가 상속된다.
주의할 점은 생성자 파라미터가 없어야 한다. 즉 비어있는 생성자여야 한다.