Menu
Coddy logo textTech

요약 - Data Fetcher

Coddy Dart 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 110개 중 81번째.

challenge icon

챌린지

쉬움

이 장에서 배운 모든 비동기 OOP 개념을 통합하는 DataFetcher 클래스를 만들어 봅시다! 비동기 초기화, 개별 항목을 가져오기 위한 비동기 메서드, 그리고 시간에 따라 여러 결과를 전달하는 스트림을 사용하는 데이터 서비스를 만들 것입니다.

코드를 두 개의 파일로 구성합니다:

  • data_fetcher.dart: 원격 소스에서 데이터를 가져오는 것을 시뮬레이션하는 DataFetcher 클래스를 만듭니다. 클래스에는 다음이 포함되어야 합니다:
    • 데이터의 출처를 저장하는 source라는 이름의 final String 필드
    • 소스를 초기화하는 private 생성자
    • Future<DataFetcher>를 반환하는 정적 비동기 팩토리 메서드 connect(String sourceName). 100밀리초의 연결 지연을 시뮬레이션한 후, 제공된 이름으로 소스가 설정된 새 인스턴스를 반환합니다.
    • Future<String>을 반환하는 비동기 메서드 fetchItem(int id). 50밀리초의 지연을 시뮬레이션한 후, [source]-Item-[id] 형식의 문자열을 반환합니다.
    • Stream<String>을 반환하는 스트림 생성기 메서드 fetchMultiple(int count). 이 메서드는 1부터 count까지(포함)의 ID에 대한 항목을 생성해야 하며, 각 항목에 대해 fetchItem 메서드를 사용합니다(각 fetch를 yield 하기 전에 await 하세요).
  • main.dart: 데이터 페처를 임포트하고 세 가지 비동기 패턴이 함께 작동하는 것을 보여줍니다:
    • Connecting to data source...를 출력합니다.
    • 비동기 팩토리를 사용하여 CloudDB라는 이름의 소스에 연결합니다.
    • 페처의 source 필드를 사용하여 Connected to [source]를 출력합니다.
    • 빈 줄을 출력합니다.
    • Fetching single item:을 출력합니다.
    • ID가 42인 항목을 가져와서 출력합니다.
    • 빈 줄을 출력합니다.
    • Fetching multiple items:를 출력합니다.
    • await for를 사용하여 fetchMultiple(3)을 반복하고 각 항목을 출력합니다.
    • 빈 줄을 출력합니다.
    • All operations complete!를 출력합니다.

이 챌린지는 초기화를 위한 정적 비동기 팩토리 패턴, 단일 작업을 위한 일반 비동기 메서드, 그리고 여러 결과를 스트리밍하기 위한 async*yield를 결합합니다. 스트림 메서드가 내부적으로 다른 비동기 메서드를 호출할 수 있는 방식에 주목하세요!

예상 출력:

Connecting to data source...
Connected to CloudDB

Fetching single item:
CloudDB-Item-42

Fetching multiple items:
CloudDB-Item-1
CloudDB-Item-2
CloudDB-Item-3

All operations complete!

직접 해보기

import 'data_fetcher.dart';

void main() async {
  // TODO: 'Connecting to data source...'를 출력하세요.
  
  // TODO: 비동기 팩토리를 사용하여 'CloudDB'라는 이름의 소스에 연결하세요.
  
  // TODO: fetcher의 source 필드를 사용하여 'Connected to [source]'를 출력하세요.
  
  // TODO: 빈 줄을 출력하세요.
  
  // TODO: 'Fetching single item:'을 출력하세요.
  
  // TODO: ID가 42인 항목을 가져와서 출력하세요.
  
  // TODO: 빈 줄을 출력하세요.
  
  // TODO: 'Fetching multiple items:'를 출력하세요.
  
  // TODO: 'await for'를 사용하여 fetchMultiple(3)을 반복하고 각 항목을 출력하세요.
  
  // TODO: 빈 줄을 출력하세요.
  
  // TODO: 'All operations complete!'를 출력하세요.
}

객체 지향 프로그래밍의 모든 레슨