■ Stream<T> 클래스에서 async*/yield 키워드를 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
import 'dart:async'; void main() async { Stream<String> stream = await getStream(['A', 'B', 'C', 'D', 'E']); int count = await Print(stream); print(count); } const Duration duration = Duration(seconds: 1); Stream<String> getStream(Iterable<String> itemIterable) async* { for (String item in itemIterable) { await Future.delayed(duration); yield item; } } Future<int> Print(Stream<String> stream) async { int count = 0; await for (String item in stream) { print(item); count++; } return count; } |
■ File 클래스의 exists/create/lastModified/writeAsString 메소드를 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
import 'dart:async'; import 'dart:io'; void main() async { createDescriptions(['apple', 'orange', 'banana']); } Future<void> createDescriptions(Iterable<String> itemIterable) async { for (String item in itemIterable) { try { File file = File('$item.txt'); if (await file.exists()) { DateTime dateTimeLastModified = await file.lastModified(); print('$item을 위한 파일이 이미 존재합니다. $dateTimeLastModified에 수정되었습니다.'); continue; } await file.create(); await file.writeAsString('Start describing $item in this file.'); } on IOException catch (exception) { print('$item 설명을 생성할 수 없습니다 : $exception'); } } } |
■ try … on … catch문을 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
import 'dart:async'; import 'dart:io'; void main() async { createDescriptions(['apple', 'orange', 'banana']); } Future<void> createDescriptions(Iterable<String> itemIterable) async { for (String item in itemIterable) { try { File file = File('$item.txt'); if (await file.exists()) { DateTime dateTimeLastModified = await file.lastModified(); print('$item을 위한 파일이 이미 존재합니다. $dateTimeLastModified에 수정되었습니다.'); continue; } await file.create(); await file.writeAsString('Start describing $item in this file.'); } on IOException catch (exception) { print('$item 설명을 생성할 수 없습니다 : $exception'); } } } |
■ Future 클래스의 then 메소드를 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
import 'dart:async'; void main() async { await printWithDelay('테스트1'); await printWithDelay('테스트2'); await printWithDelay('테스트3'); } const Duration duration = Duration(seconds: 1); Future<void> printWithDelay(String message) { return Future.delayed(duration).then((_) { print(message); }); } |
■ Future 클래스의 delayed 팩토리 생성자를 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
import 'dart:async'; void main() async { await printWithDelay('테스트1'); await printWithDelay('테스트2'); await printWithDelay('테스트3'); } const Duration duration = Duration(seconds: 1); Future<void> printWithDelay(String message) async { await Future.delayed(duration); print(message); } |
■ Duration 클래스를 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
const Duration oneSecond = Duration(seconds: 1); |
■ import 키워드를 사용해 외부 패키지를 임포트하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
import 'package:test_app/main.dart'; |
■ 피보나치 수열을 구하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
void main() { int result = getFibonacci(20); print(result); } int getFibonacci(int n) { if (n == 0 || n == 1) { return n; } return getFibonacci(n - 1) + getFibonacci(n - 2); } |
■ String 클래스의 contains 메소드를 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
void main() { List<String> list = ['Seoul', 'New York', 'Tokyo', 'Sydney']; list.where((city) => city.contains('S')).forEach(print); } |
■ while문을 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
void main() { int year = 2010; while (year < 2021) { print(year); year += 1; } } |
■ HashSet 클래스를 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
import 'dart:collection'; import 'dart:math'; void main() { Random rand = Random(); HashSet<int> hashSet = HashSet(); while (hashSet.length < 6) { hashSet.add(rand.nextInt(45)); } print(hashSet); } |
■ import 키워드에서 as 키워드를 사용해 별칭을 만드는 방법을 보여준다. ▶ 예제 코드 (DART)
|
import 'dart:collection'; import 'dart:math' as math; void main() { math.Random rand = math.Random(); HashSet<int> hashSet = HashSet(); while (hashSet.length < 6) { hashSet.add(rand.nextInt(45)); } print(hashSet); } |
■ import 키워드를 사용해 컬렉션 패키지를 임포트하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
import 'dart:collection'; |
■ Random 클래스의 nextInt 메소드를 사용해 난수를 구하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
import 'dart:collection'; import 'dart:math'; void main() { Random rand = Random(); HashSet<int> hashSet = HashSet(); while (hashSet.length < 6) { hashSet.add(rand.nextInt(45)); } print(hashSet); } |
■ class 키워드를 사용해 클래스를 만드는 방법을 보여준다. ▶ 예제 코드 (DART)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
class Car { int maximumSpeed; double price; String name; Car(this.maximumSpeed, this.price, this.name); double saleCar() { price = price * 0.9; print('$name : $price'); return price; } } void main() { Car bmw = Car(320, 100000, 'BMW'); Car benz = Car(250, 70000, 'BENZ'); Car ford = Car(200, 80000, 'FORD'); bmw.saleCar(); bmw.saleCar(); benz.saleCar(); ford.saleCar(); } |
■ Stream<T> 클래스의 length 속성을 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
import 'dart:async'; main() { Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]); stream.length.then((value) => print('항목 수 : $value')); } |
■ for문을 사용해 구구단을 만드는 방법을 보여준다. ▶ 예제 코드 (DART)
|
void main() { int i; int j; for (i = 2; i <= 9; i++) { for (j = 1; j <= 9; j++) { print('$i * $j = ${i * j}'); } } } |
■ Stream<T> 클래스의 isEmpty 속성을 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
import 'dart:async'; main() { Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]); stream.isEmpty.then((value) => print('항목 존재 여부 : $value')); } |
■ Stream<T> 클래스의 last 속성을 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
import 'dart:async'; main() { Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]); stream.last.then((value) => print('두번째 항목 : $value')); } |
■ Stream<T> 클래스를 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
import 'dart:async'; Stream<int> countStream(int count) async* { for (int i = 1; i <= count; i++) { print('countStream : $i'); yield i; } } Future<int> sumStream(Stream<int> stream) async { int summary = 0; await for (int value in stream) { print('sumStream : $value'); summary += value; } return summary; } main() async { Stream<int> stream = countStream(10); int summary = await sumStream(stream); print(summary); } |
■ Stream<T> 클래스의 first 속성을 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
import 'dart:async'; main() { Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]); stream.first.then((value) => print('첫번째 항목 : $value')); } |
■ jsonEncode 함수를 사용해 객체에서 JSON 문자열을 구하는 방법을 보여준다. ▶ 예제 코드 (DART)
|
import 'dart:convert'; void main() { List<Map<String, Object?>> scoreList = [ { 'score': 40 }, { 'score': 80 }, { 'score': 100, 'overtime': true, 'special_guest': null } ]; String jsonString = jsonEncode(scoreList); print(jsonString); } |
■ import 키워드를 사용해 변환 패키지를 임포트하는 방법을 보여준다. ▶ 예제 코드 (DART)
■ jsonDecode 함수를 사용해 JSON 문자열에서 객체를 생성하는 방법을 보여준다. ▶ 예제 코드 (DART)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
import 'dart:convert'; void main() { String jsonString = ''' [ { "subject" : "국어", "score" : 100 }, { "subject" : "수학", "score" : 90 } ] '''; dynamic recordList = jsonDecode(jsonString); print(recordList is List); dynamic record1 = recordList[0]; print(record1 is Map); print(record1['subject']); print(record1['score']); dynamic record2 = recordList[1]; print(record2 is Map); print(record2['subject']); print(record2['score']); } |
■ Future 클래스의 delayed 팩토리 생성자를 사용하는 방법을 보여준다. ▶ 예제 코드 (DART)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
import 'dart:async'; void main() { printOne(); printTwo(); printThree(); } void printOne() { print('One'); } void printTwo() async { Future.delayed(Duration(seconds: 1), () { print('Future!!'); }); print('Two'); } void printThree() { print('Three'); } |