Factory 키워드

devkwon·2023년 2월 5일
0

factory 키워드는 클래스의 생성자가 매번 새로운 인스턴스를 생성하는 경우가 아닐 때 사용한다. 예를 들어 cache에서 기존 인스턴스를 리턴해주거나, 인스턴스의 subtype을 리턴해주는 경우이다. 또다른 사용법으로는 이니셜라이저에서 다룰 수 없는 final 변수의 초기값을 초기화(initalize)하기 위해 사용할 수 있다.

class Logger {
  final String name;
  bool mute = false;

  // _cache is library-private, thanks to
  // the _ in front of its name.
  static final Map<String, Logger> _cache = <String, Logger>{};

  factory Logger(String name) {
    return _cache.putIfAbsent(name, () => Logger._internal(name));
  }

  factory Logger.fromJson(Map<String, Object> json) {
    return Logger(json['name'].toString());
  }

  Logger._internal(this.name);

  void log(String msg) {
    if (!mute) print(msg);
  }
}

사용법은 기존 생성자와 동일하다.

var logger = Logger('UI');
logger.log('Button clicked');

var logMap = {'name': 'UI'};
var loggerJson = Logger.fromJson(logMap);

0개의 댓글