상수 생성자는 const로 호출해요

상수 생성자는 const로 호출해요

prefer_const_constructors 린트 규칙은, const로 호출할 수 있는 생성자는 실제로 const로 호출하라고 권하는 규칙이에요. Stable 상태이고, 코드 수정도 자동으로 가능해요.

출처: Prefer const with constant constructors.

본문

생성자를 const로 호출해서 canonicalize 된 인스턴스를 만들 수 있다면, 그렇게 하는 게 더 좋아요. 같은 값이라면 인스턴스를 새로 만들 필요 없이 상수 인스턴스를 재사용하는 게 효율적이거든요.

BADconst 생성자인데 new로 호출했어요.

class A {
  const A();
}

void accessA() {
  A a = new A();
}

GOOD — 생성자가 const니까 const A()로 만들었어요.

class A {
  const A();
}

void accessA() {
  A a = const A();
}

물론 생성자가 const가 아니면 이렇게 할 수 없어요. 아래처럼 값을 필드에 담는 생성자라면 const A(this.x)처럼 선언할 수 있고, 그 값을 그대로 받아 넘길 때도 자연스럽게 흘러가요.

class A {
  final int x;

  const A(this.x);
}

A foo(int x) => new A(x);

규칙 켜기

analysis_options.yaml 파일의 linter > rules 아래에 prefer_const_constructors를 추가하면 돼요.

linter:
  rules:
    - prefer_const_constructors

YAML 맵 문법으로 설정한다면 이렇게 써요.

linter:
  rules:
    prefer_const_constructors: true

더 알아보기

  • 상수 생성자를 만들려면 prefer_const_constructors_in_immutables 규칙을 함께 보면 좋아요.