728x90
반응형
76. 비동기 코드 성능 분석하기
문제 설명: 비동기 코드의 성능을 분석하고 개선하세요.
문제 해결
- 성능 분석 도구 사용: Dart의 dart:developer 패키지와 DevTools를 활용하여 비동기 코드의 성능을 분석할 수 있습니다. Dart DevTools를 사용하여 메모리 사용량, CPU 사용량, 이벤트 루프의 상태 등을 확인합니다.
- 코드 최적화: 비동기 함수가 불필요하게 자주 호출되거나, 여러 비동기 작업이 동시에 진행되어 성능 저하를 일으킬 수 있습니다. Future.wait를 사용하여 여러 비동기 작업을 병렬로 처리하거나, async/await를 적절히 사용하여 효율적인 코드 흐름을 유지합니다.
예시 코드
import 'dart:async';
Future<void> fetchData() async {
await Future.delayed(Duration(seconds: 1));
print('Data fetched');
}
Future<void> processData() async {
await Future.delayed(Duration(seconds: 2));
print('Data processed');
}
Future<void> main() async {
var stopwatch = Stopwatch()..start();
await Future.wait([fetchData(), processData()]);
stopwatch.stop();
print('Total time: ${stopwatch.elapsedMilliseconds} ms');
}
위 코드는 두 개의 비동기 작업을 병렬로 처리하여 총 시간을 줄이는 예제입니다.
77. Stream 변환하기
문제 설명: Stream을 변환하여 데이터 필터링을 수행하세요.
문제 해결
- Stream 변환: Dart의 Stream 클래스를 사용하여 데이터 스트림을 변환하고 필터링할 수 있습니다. Stream의 map, where, transform 메서드를 사용하여 데이터를 처리합니다.
- 예시 코드
import 'dart:async';
void main() {
final stream = Stream.fromIterable([1, 2, 3, 4, 5]);
final filteredStream = stream.where((number) => number.isEven);
final mappedStream = filteredStream.map((number) => 'Number: $number');
mappedStream.listen((value) => print(value));
}
위 코드는 정수 스트림에서 짝수만 필터링하고, 필터링된 값을 문자열로 변환하여 출력합니다.
78. 비동기 에러 로깅
문제 설명: 비동기 에러를 로깅하는 시스템을 작성하세요.
문제 해결
- 에러 처리: try-catch 구문을 사용하여 비동기 작업에서 발생하는 에러를 잡고, 로깅 시스템을 통해 에러를 기록합니다.
- 예시 코드
import 'dart:async';
Future<void> faultyOperation() async {
throw Exception('Something went wrong');
}
void logError(Object error, StackTrace stackTrace) {
print('Error: $error');
print('Stack trace: $stackTrace');
}
Future<void> main() async {
try {
await faultyOperation();
} catch (e, s) {
logError(e, s);
}
}
위 코드는 faultyOperation에서 발생하는 에러를 잡아 logError 함수로 로깅합니다.
79. 컴포넌트 간 데이터 통신
문제 설명: 비동기 메커니즘을 사용하여 두 컴포넌트 간 데이터 통신을 구현하세요.
문제 해결
- 비동기 데이터 통신: 두 컴포넌트 간 데이터 통신을 위해 StreamController를 사용하여 이벤트를 전달할 수 있습니다.
- 예시 코드
import 'dart:async';
void main() {
final streamController = StreamController<String>();
final componentA = () {
streamController.add('Hello from Component A');
};
final componentB = () {
streamController.stream.listen((message) {
print('Component B received: $message');
});
};
componentB();
componentA();
}
위 코드는 StreamController를 통해 두 컴포넌트가 비동기적으로 데이터를 통신하는 예제입니다.
80. 비동기 동시성 문제 해결하기
문제 설명: 비동기 동시성 문제를 해결하기 위한 접근 방식을 설명하세요.
문제 해결
- 동시성 문제: 비동기 코드에서 동시성 문제는 여러 비동기 작업이 동시에 실행될 때 발생할 수 있습니다. 이러한 문제를 해결하기 위해서는 동기화 메커니즘을 사용하거나, 비동기 작업의 순서를 제어할 수 있는 방법을 사용합니다.
- 예시 코드
import 'dart:async';
Future<void> incrementCounter() async {
await Future.delayed(Duration(seconds: 1));
print('Counter incremented');
}
Future<void> main() async {
final count1 = incrementCounter();
final count2 = incrementCounter();
await Future.wait([count1, count2]);
print('Both increments completed');
}
위 코드는 두 개의 비동기 작업이 완료될 때까지 기다리고, 작업이 완료된 후 메시지를 출력합니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
728x90
반응형