다트의 dart:async 라이브러리에서 Timer 사용 방법은?
_____Q1: Timer란 무엇인가요?
Timer는 지정한 시간 후에 한 번 실행하거나, 일정 간격으로 반복 실행되는 콜백 함수를 스케줄링하는 클래스입니다.
Q2: Timer를 사용하려면 어떻게 import하나요?
```dart
import 'dart:async';
```
Q3: 한 번만 실행되는 타이머는 어떻게 만드나요?
```dart
Timer(Duration(seconds: 2), () {
print('2초 후에 실행됩니다.');
});
```
`Duration`으로 지연 시간을 지정하고, 두 번째 인자로 콜백 함수를 전달합니다.
Q4: 반복 실행되는 타이머(정기 타이머)는 어떻게 만들 수 있나요?
```dart
Timer.periodic(Duration(seconds: 1), (Timer timer) {
print('1초마다 반복 실행됩니다.');
});
```
`Timer.periodic`은 일정 간격으로 콜백을 반복 호출합니다. 콜백에 Timer 객체를 인자로 받습니다.
Q5: 타이머를 중지하려면 어떻게 해야 하나요?
```dart
Timer timer = Timer.periodic(Duration(seconds: 1), (timer) {
print('실행 중');
});
timer.cancel(); // 타이머 중지
```
`cancel()` 메서드를 호출하면 타이머가 즉시 중단됩니다.
Q6: Timer의 콜백 함수 내에서 현재 시간을 알 수 있나요?
네, 콜백 내에서 `DateTime.now()`를 사용하면 됩니다.
Q7: Timer 내부에서 상태를 변경해 UI에 반영할 수 있나요?
비동기 이벤트이므로 Flutter 환경에서는 `setState`와 함께 Timer를 사용하여 주기적으로 UI 갱신을 할 수 있습니다.
Q8: Timer callback이 실행되는 스레드는?
단일 스레드 이벤트 루프(메인 이벤트 루프)에서 실행되어, UI 스레드와 동일합니다.
`Future.delayed`를 사용하면 비동기 지연 후 작업을 수행할 수 있습니다.
```dart
await Future.delayed(Duration(seconds: 2));
print('2초 후 이 코드 실행');
```
Q10: Timer의 주용도는 무엇인가요?
- 특정 시간 후 작업 실행
- 반복 작업 실행 (애니메이션, 폴링 등)
- 비동기 지연 처리 및 타임아웃 구현
---
요약
- `Timer(Duration, callback)` : 지연 후 한 번 실행
- `Timer.periodic(Duration, callback)` : 주기적 실행
- 타이머 중단은 `timer.cancel()`
- `dart:async` 라이브러리에서 제공
- UI 갱신, 비동기 작업 처리 등에 유용
---
필요한 기본 형식 예제:
```dart
import 'dart:async';
void main() {
// 한 번 실행되는 타이머
Timer(Duration(seconds: 3), () {
print('3초 후 실행');
});
// 반복 실행 타이머
Timer periodicTimer = Timer.periodic(Duration(seconds: 1), (timer) {
print('매초 실행, 타이머 번호: ${timer.tick}');
if (timer.tick >= 5) {
timer.cancel();
print('타이머 중지됨');
}
});
}
```
그 중에서도 `Timer` 클래스는 특정 시간 후에 작업을 수행하거나 주기적으로 작업을 실행하는 데 유용합니다.
이 글에서는 `Timer`의 사용 방법에 대해 자세히 설명하겠습니다.
Timer 클래스 `Timer` 클래스는 두 가지 주요 형태로 사용할 수 있습니다: 1. 지연 타이머 (One-shot Timer) : 지정된 시간 후에 한 번만 실행됩니다.
2. 주기적 타이머 (Periodic Timer) : 지정된 간격으로 반복적으로 실행됩니다.
Timer 생성하기 1. 지연 타이머 지연 타이머는 `Timer` 생성자를 사용하여 생성할 수 있습니다.
다음은 지연 타이머의 기본 사용 예입니다.
```dart import 'dart:async'; void main() { print('타이머 시작'); // 3초 후에 실행되는 타이머 Timer(Duration(seconds:
3), () { print('3초 후에 실행됩니다!'); }); print('타이머 설정 완료'); } ``` 위의 코드에서 `Timer`는 3초 후에 지정된 콜백 함수를 실행합니다.
`Duration` 객체를 사용하여 시간을 설정합니다.
2. 주기적 타이머 주기적 타이머는 `Timer.periodic` 메서드를 사용하여 생성할 수 있습니다.
이 메서드는 주어진 간격으로 반복적으로 실행됩니다.
```dart import 'dart:async'; void main() { print('주기적 타이머 시작'); // 1초마다 실행되는 주기적 타이머 Timer.periodic(Duration(seconds: 1), (Timer timer) { print('1초마다 실행됩니다!'); // 5초 후에 타이머를 중지 if (timer.tick >=
5) { timer.cancel(); print('타이머 중지'); } }); } ``` 위의 예제에서는 1초마다 메시지를 출력하며, 5초가 지나면 타이머를 중지합니다.
`timer.tick` 속성을 사용하여 타이머가 몇 번 실행되었는지를 확인할 수 있습니다.
Timer 취소하기 타이머는 `cancel()` 메서드를 호출하여 언제든지 취소할 수 있습니다.
위의 주기적 타이머 예제에서도 `timer.cancel()`을 사용하여 타이머를 중지했습니다.
예외 처리 타이머의 콜백 함수 내에서 예외가 발생하면, 해당 예외는 타이머에 의해 처리되지 않습니다.
따라서 예외 처리를 위해 `try-catch` 블록을 사용하는 것이 좋습니다.
```dart import 'dart:async'; void main() { Timer(Duration(seconds:
2), () { try { // 예외 발생 throw Exception('예외 발생!'); } catch (e) { print('타이머 내에서 예외 처리: $e'); } }); } ``` 결론 Dart의 `Timer` 클래스는 비동기 작업을 수행하는 데 매우 유용한 도구입니다.
지연 타이머와 주기적 타이머를 사용하여 다양한 시간 기반 작업을 쉽게 구현할 수 있습니다.
타이머를 사용할 때는 항상 취소할 수 있는 방법을 고려하고, 예외 처리를 통해 안정성을 높이는 것이 중요합니다.
`dart:async` 라이브러리를 활용하여 비동기 프로그래밍을 더욱 효과적으로 수행해 보세요.
작성자:
박채원 [비회원]
| 작성일자: 1년 전
2024-09-19 01:52:46
조회수: 323 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 323 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.