unnecessary_getters_setters 린트 규칙: 안전하려고 붙이는 getter/setter 피하기
unnecessary_getters_setters 린트 규칙: 안전하려고 붙이는 getter/setter 피하기
unnecessary_getters_setters은 "안전"을 위해 필드를 그냥 getter/setter로 감싸는 것을 피하라고 알려주는 린트 규칙이에요. Java나 C#에서는 이런 패턴이 흔하지만, Dart에는 그 제약이 없어서 그럴 필요가 없어요.
본문
설명
Effective Dart에서는 이렇게 말해요. "안전"을 위해 필드를 getter와 setter로 감싸는 것을 피하세요.
Java와 C#에서는 모든 필드를 getter와 setter(또는 C#의 프로퍼티) 뒤에 숨기는 게 흔해요. 구현이 그냥 필드로 전달(forward)되기만 하더라도 말이죠. 그렇게 해두면, 나중에 그 멤버에서 더 많은 작업을 해야 할 때 호출부를 건드리지 않고 처리할 수 있기 때문이에요. Java에서는 getter 메서드를 부르는 것과 필드에 접근하는 것이 서로 다르고, C#에서도 프로퍼티에 접근하는 것이 raw 필드에 접근하는 것과 바이너리 호환이 안 되기 때문이에요.
하지만 Dart에는 그런 제약이 없어요. 필드와 getter/setter는 완전히 구분할 수 없을 정도로 똑같이 동작해요. 그래서 클래스에 필드를 그대로 노출해두고, 나중에 필요해지면 그 필드를 getter와 setter로 감싸도 그 필드를 사용하는 어떤 코드도 손대지 않아도 돼요.
BAD:
class Box {
var _contents;
get contents => _contents;
set contents(value) {
_contents = value;
}
}
GOOD:
class Box {
var contents;
}
필드를 그대로 노출해도, 나중에 getter/setter로 바꿔도 사용하는 코드는 똑같으니까 그냥 깔끔하게 필드만 두는 게 좋아요.
활성화 방법
unnecessary_getters_setters 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 규칙을 추가하면 돼요.
linter:
rules:
- unnecessary_getters_setters
대신 YAML 맵 문법을 사용해서 린트 규칙을 설정하고 있다면, linter > rules 아래에 unnecessary_getters_setters: true를 추가하면 돼요.
linter:
rules:
unnecessary_getters_setters: true