no_runtimetype_tostring 린트: runtimeType에 toString() 호출 피하기

no_runtimetype_tostring 린트: runtimeType에 toString() 호출 피하기

런타임 타입(runtimeType)에 toString()을 호출하는 코드를 잡아주는 린트(lint) 규칙이에요. 런타임 타입에 toString을 호출하는 건 부담이 큰 연산이라 성능에 영향을 줄 수 있어서, 되도록 피하라는 규칙이랍니다.

출처: no_runtimetype_tostring

본문

설명

런타임 타입에 toString을 호출하는 것은 간단하지 않은 연산이라 성능에 부정적인 영향을 줄 수 있어요. 되도록 피하는 게 좋아요.

BAD:

class A {
  String toString() => '$runtimeType()';
}

GOOD:

class A {
  String toString() => 'A()';
}

이렇게 런타임 타입 대신 클래스 이름을 그대로 문자열로 적어 주면 성능 문제를 피할 수 있어요.

이 린트에는 성능이 문제되지 않거나, 실제 타입 정보가 성능보다 더 중요한 몇 가지 예외가 있어요:

  • assertion(단언) 안에서
  • throw 표현식 안에서
  • catch 절에서
  • mixin 선언에서
  • abstract 클래스 선언에서

이런 곳에서는 runtimeType.toString()을 써도 괜찮아요.

활성화 방법

no_runtimetype_tostring 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 no_runtimetype_tostring을 추가해요.

analysis_options.yaml:

linter:
  rules:
    - no_runtimetype_tostring

대신 YAML 맵 문법으로 린트 규칙을 설정한다면, linter > rules 아래에 no_runtimetype_tostring: true라고 적어요.

analysis_options.yaml:

linter:
  rules:
    no_runtimetype_tostring: true

더 알아보기