본문 바로가기
개발/Flutter

Flutter Named Constructor, Factory Constructor

by dev_caleb 2023. 4. 25.
728x90

 

Flutter에서, 

기본적으로 사용하는 Constructor말고, 이름을 지정해서 사용하는 constructor를 NamedContructor라고 한다. 

 

class Point {
  double x, y;

  Point(this.x, this.y);

  Point.origin() {
    x = 0;
    y = 0;
  }
}

void main() {
  var point1 = Point(2, 3); // 기본 생성자로 객체 생성
  var point2 = Point.origin(); // Named Constructor로 객체 생성

  print('point1: (${point1.x}, ${point1.y})'); // 출력: point1: (2.0, 3.0)
  print('point2: (${point2.x}, ${point2.y})'); // 출력: point2: (0.0, 0.0)
}

 

 

반면에, Factory Constructor는 생성자 호출 결과가 새로운 인스턴스가 아닐 수도 있다는 것이 Named Constructor와 다르다. Factory Constructor는 클래스의 인스턴스를 생성하는 것 외에도, 복잡한 로직을 통해 새로운 객체를 생성하거나, 기존 객체를 재활용하여 리턴할 수도 있다고 한다.

 

 

class Rectangle {
  int width, height;

  Rectangle(this.width, this.height);

  factory Rectangle.square(int size) {
    return Rectangle(size, size);
  }
}

void main() {
  var rect1 = Rectangle(2, 3);
  var rect2 = Rectangle.square(5);

  print('rect1: (${rect1.width}, ${rect1.height})'); // 출력: rect1: (2, 3)
  print('rect2: (${rect2.width}, ${rect2.height})'); // 출력: rect2: (5, 5)
}

 

 

기존의 constructor에서는 자기자신 Rectangle을 그대로 객체로 가져올 수는 없지만, factory constructor에서는 자기자신 객체를 contructor에서 넣어줄 수 있다.

728x90