-
[DART] Future.delayed // TimerFlutter/DART 2023. 8. 31. 14:25
03. 타이머
Future.delayed와 Timer
- Future.delayed: Future 객체를 반환한다.
- 주어진 시간 만큼 지연 후 함수를 실행한다.
- 내부적으로는 타이머를 사용하지만 외부에 노출되지 않으므로 중간에 취소하거나 재시작하거나 할 수 없다.
- Future 객체를 반환하므로 await 키워드를 사용해서 지연 시간을 보장할 수 있다.
- Timer: 아무 것도 반환하지 않는다.
- 주어진 시간 만큼 지연 후 함수를 실행한다.
- 주기적인 타이머 알림을 받을 수 있다.
- 타이머를 종료(cancel)할 수 있다.
다트: Future.delayed
Future.delayed(기간, 함수); 형식으로 호출한다.
- 기간: Duration 객체, 보통 const 상수로 만든다.
- 함수: 익명함수
void main() { Future.delayed(const Duration(seconds: 2), () { print('passed 2 sec.'); // 2초 후 출력 }); }
2초 후에 passed 2 sec 문자열을 출력한다.
플러터: Timer
타이머를 종료(cancel)한다.
void main() { Timer t = Timer(Duration(seconds: 1), () { print('passed 2 sec'); // 출력 안 됨 }); t.cancel(); // 곧바로 취소되어 출력 안 됨 }
주기적인 타이머 알림을 받는다.
Timer.periodic(Duration(seconds: 5), (timer) { print(DateTime.now()); });
바로 위 코드블럭의
Timer.periodic 메서드를 보면, 두번째 매개변수는 콜백함수이고,
timer 라는 변수가 인자로 들어가있다.timer라는 변수를 선언하지도 않았는데 뭔지 알고 쓰는건가? 싶었는데,
저 변수는 Timer 클래스로 만든 인스턴스 그 자체를 가리킨다고 한다즉,
Timer t = Timer.periodic( const Duration(seconds:2), (t) => print(DateTime.now()) );
이 코드와 같다고 보면 됨.
그러므로 저 변수의 이름은 단순히 이름일 뿐, 마음대로 변경해도 스스로를 가리키는 것에는 변함 없기 때문에 마구마구 변경해도 된다
- Future.delayed: Future 객체를 반환한다.