no_runtimetype_tostring 린트: runtimeType에 toString() 호출 피하기
no_runtimetype_tostring 린트: runtimeType에 toString() 호출 피하기
런타임 타입(runtimeType)에 toString()을 호출하는 코드를 잡아주는 린트(lint) 규칙이에요. 런타임 타입에 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