HOME
NOTE

[Flutter] Freezed에 메서드 추가하기

CREATED
2025. 3. 19. 오후 11:14:26
UPDATED
2025. 3. 20. 오전 8:06:06
TAGS
#Flutter#Freezed

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가지 방식으로 작동할 수 있다.

  1. implementation: Freezed의 기본 방식. Freezed는 추상 클래스를 구현한다. 이 방식에서는 클래스의 타입만 상속되고 메서드나 프로퍼티는 상속되지 않는다.
  2. extension: private 생성자를 추가하면 Freezed는 클래스를 extends 한다. 이 방식에서는 모든 메서드와 프로퍼티가 상속된다.

주의할 점은 생성자 파라미터가 없어야 한다. 즉 비어있는 생성자여야 한다.

참고