Time.periodic

샤워실의 바보·2024년 1월 9일
0
post-thumbnail

Flutter에서 Timer.periodicdart:async 라이브러리에서 제공하는 Timer 클래스의 생성자입니다. 이것은 정기적인 간격으로 이벤트를 발생시키는 반복 타이머를 만듭니다.

주기적 타이머를 만들 때, 콜백 함수가 얼마나 자주 호출될지 정의하는 Duration을 지정합니다. 타이머는 취소될 때까지 콜백이 반복적으로 호출되도록 보장합니다.

다음은 Timer.periodic을 사용하는 기본 예제입니다:

import 'dart:async';

void startTimer() {
  const oneSec = Duration(seconds: 1);
  Timer.periodic(oneSec, (Timer timer) {
    // 반복적인 작업, 예를 들어 사용자 인터페이스 업데이트나 백그라운드 계산 수행
    print('타이머 틱');
  });
}

void main() {
  startTimer();
}

이 예제에서, startTimer가 호출되면 매초 '타이머 틱'을 출력하는 타이머를 생성합니다.

고려해야 할 중요한 점들

  • 생명주기 관리: Flutter 앱의 맥락에서, 특히 상태 있는 위젯과 타이머를 사용할 때, 타이머의 생명주기를 관리해야 합니다. 위젯이 폐기된 후에도 콜백이 호출되지 않도록, 상태 있는 위젯의 dispose 메서드에서 타이머를 취소해야 합니다. 이는 메모리 누수나 예외를 발생시킬 수 있습니다.

    class _MyWidgetState extends State<MyWidget> {
      Timer? _timer;
    
      
      void initState() {
        super.initState();
        _timer = Timer.periodic(Duration(seconds: 1), (timer) {
          // 무언가를 수행
        });
      }
    
      
      void dispose() {
        _timer?.cancel();
        super.dispose();
      }
    }
  • 정확도: Dart의 비동기적 특성 때문에 실제 호출이 지정한 시간에 정확히 일어나지 않을 수 있습니다. 콜백 처리 시간이 타이머 간격보다 길면 다음 콜백이 지연될 것입니다.

  • 성능 고려사항: 타이머를 올바르게 관리하지 않으면 앱의 성능에 영향을 줄 수 있습니다. 특히 여러 타이머를 생성하거나 타이머의 콜백 내에서 복잡한 연산을 수행할 때 이에 해당됩니다.

  • 백그라운드에서의 실행: Flutter 앱이 백그라운드로 전환될 때, 실행 중인 타이머는 일시 정지될 수 있으며, 플랫폼에 따라 실행 행동이 달라질 수 있습니다. 앱이 활성화되지 않을 때 타이머의 생명주기와 제약사항을 인지하고 있어야 합니다.

Dart(따라서 Flutter도 포함)의 Timer.periodic은 JavaScript의 setInterval()과 유사합니다. 두 기능 모두 지정된 간격마다 함수를 반복적으로 실행하는 데 사용됩니다. 그들이 작동하는 방식에 대한 비교는 다음과 같습니다:

Dart: Timer.periodic

Dart에서는 Timer.periodic을 사용하여 지정된 시간 간격마다 콜백 함수를 반복적으로 호출하는 타이머를 생성합니다. 사용 방법은 다음과 같습니다:

import 'dart:async';

void periodicallyPrintMessage(Duration interval) {
  Timer.periodic(interval, (Timer t) {
    print("이 메시지는 매 ${interval.inSeconds}초마다 출력됩니다");
  });
}

void main() {
  periodicallyPrintMessage(Duration(seconds: 1));
}

이 Dart 코드는 매초 메시지를 출력하는 타이머를 설정합니다.

JavaScript: setInterval

JavaScript에서 setInterval은 유사한 방식으로 작동하며, 지정된 간격마다 함수를 반복적으로 호출합니다:

function periodicallyPrintMessage(interval) {
  setInterval(() => {
    console.log(`This message is printed every ${interval / 1000} seconds`);
  }, interval);
}

periodicallyPrintMessage(1000); // 매 1000 밀리초(1초)마다 함수를 호출합니다.

이 JavaScript 코드는 콘솔에 매초 메시지를 로깅하는 인터벌을 설정합니다.

주요 포인트

  • Timer.periodicsetInterval() 모두 정기적인 간격으로 주어진 함수를 실행합니다.
  • Dart에서는 Timer 클래스가 dart:async 라이브러리에서 제공되며, JavaScript에서는 setInterval()이 표준 내장 함수입니다.
  • 이 타이머/인터벌의 생명주기를 관리하는 것이 중요하며, 더 이상 필요하지 않을 때 이를 취소하여 메모리 누수나 의도치 않은 동작을 방지해야 합니다.
  • Dart에서는 _timer.cancel()을 사용하여 타이머를 취소하고, JavaScript에서는 clearInterval(intervalID)을 사용하여 인터벌을 제거합니다.
profile
공부하는 개발자

0개의 댓글