Sink 인스턴스는 반드시 close 해주세요

Sink 인스턴스는 반드시 close 해주세요

dart:coreSink 인스턴스는 사용한 뒤 반드시 close를 호출해 주세요. 닫지 않으면 메모리 누수나 예상치 못한 동작이 생길 수 있어요.

출처: close_sinks

본문

dart:coreSink 인스턴스에는 close를 호출하는 걸 권장해요.

Sink을 닫으면 메모리 누수와 예상치 못한 동작을 막을 수 있어요.

BAD 예시:

class A {
  IOSink _sinkA;
  void init(filename) {
    _sinkA = File(filename).openWrite(); // LINT
  }
}

BAD:

void someFunction() {
  IOSink _sinkF; // LINT
}

GOOD 예시:

class B {
  IOSink _sinkB;
  void init(filename) {
    _sinkB = File(filename).openWrite(); // OK
  }

  void dispose(filename) {
    _sinkB.close();
  }
}

GOOD:

void someFunctionOK() {
  IOSink _sinkFOK; // OK
  _sinkFOK.close();
}

알려진 제한 사항

이 규칙은 Sink이 만들어지고 닫히는 모든 패턴을 추적하지는 못해요. 자세한 내용은 sdk#57882를 참고해 주세요.

활성화하기

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

linter:
  rules:
    - close_sinks

만약 linter 규칙을 YAML 맵 문법으로 설정한다면 linter > rules 아래에 close_sinks: true라고 적어 주면 돼요.

linter:
  rules:
    close_sinks: true

더 알아보기

  • Linter rules 목록에서 다른 규칙도 살펴볼 수 있어요.
  • 파일 입출력에서 Sink/IOSink 사용법은 dart:io 문서에서 확인해 보세요.