🐦 Flutter

[Dart] Factory Constructor

ji-hyun 2022. 12. 11. 18:00

Factory Constructor

Factory Constructor 는 특이하게도 메서드처럼 바디가 있음

무조건 현재 클래스의 인스턴스를 반환해줘야 함

 

void main(){
  final parent = Parent(id: 1);
  print(parent.id);
  
  final child = Child(id: 3);
  print(child.id);
}

class Parent {
  final int id;
  
  Parent({
    required this.id,
  });
  
  factory Parent(int id) {
    return Parent(id: id); // error
  }
}

class Child extends Parent {
  Child({
    required super.id,
  });
}

 

하지만 에러가 나는 것을 볼 수 있다.

같은 이름의 Consturctor 는 생성할 수 없기 때문이다.

 

 

그래서 named Constructor 로 생성해줘야 한다.

다음처럼 수정해보자.

 

class Parent {
  final int id;
  
  Parent({
    required this.id,
  });
  
  factory Parent.fromInt(int id) {
    return Parent(id: id); // success!
  }
}

 

factory 만 빼면 named Constructor 와 비슷하다. (물론 바디 빼고)

 

 

void main(){
  final parent = Parent(id: 1);
  final parent2 = Parent.fromInt(3); // positional parameter 임
}

 

 

 

 

 

특이점

내 현재의 클래스를 상속한 클래스의 인스턴스를 만들 수 있다는 점이 특이하다

 

 

위와 같이 Child 클래스의 인스턴스인 것을 확인할 수 있다!