Menu
Coddy logo textTech

요약 - 제네릭 저장소

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

challenge icon

챌린지

쉬움

컬렉션과 제네릭에 대해 배운 모든 것을 결합하여 제네릭 저장소 시스템을 만들어 봅시다! 어떤 타입의 아이템이든 저장하고, 검색하고, for-in 루프를 사용하여 반복할 수 있는 Storage<T> 클래스를 만들 것입니다.

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

  • storage.dart: 두 개의 클래스로 제네릭 저장소 시스템을 만듭니다:
    • 저장된 아이템에 대한 반복을 가능하게 하기 위해 Iterator<T>를 구현하는 StorageIterator<T> 클래스
    • 다음 기능을 갖추고 Iterable<T>를 상속받는 Storage<T> 클래스:
      • 내부적으로 아이템을 보관할 프라이빗 리스트
      • 새 아이템을 저장하는 add(T item) 메서드
      • 주어진 인덱스의 아이템을 반환하는 getAt(int index) 메서드
      • 저장된 아이템의 개수를 반환하는 count 게터(getter)
      • 저장된 아이템에 대한 StorageIterator를 반환하는 iterator 게터(getter)
  • main.dart: 저장소 파일을 임포트하고 다양한 타입을 사용하여 제네릭 저장소를 시연합니다:
    • Storage<String>을 생성하고 세 개의 도시 이름을 추가합니다: 'Paris', 'Tokyo', 'Sydney'
    • 아이템의 개수를 출력합니다
    • 인덱스 1에 있는 아이템을 출력합니다
    • for-in 루프를 사용하여 각 도시를 개별 줄에 출력합니다
    • 빈 줄을 출력합니다
    • Storage<int>를 생성하고 네 개의 숫자 100, 200, 300, 400을 추가합니다
    • where 메서드를 사용하여 150보다 큰 값을 필터링한 다음, 결과 리스트를 출력합니다

여러분의 저장소 시스템은 완전한 타입 안전성을 유지하면서 모든 타입과 원활하게 작동해야 합니다. Iterable을 상속받기 때문에 where, map, fold와 같은 강력한 메서드들을 자동으로 사용할 수 있게 됩니다!

예상 출력:

Count: 3
Item at 1: Tokyo
Paris
Tokyo
Sydney

[200, 300, 400]

직접 해보기

import 'storage.dart';

void main() {
  // TODO: 도시를 위한 Storage<String> 생성
  // 세 개의 도시 추가: 'Paris', 'Tokyo', 'Sydney'

  // TODO: 아이템 개수 출력 (형식: "Count: X")

  // TODO: 인덱스 1의 아이템 출력 (형식: "Item at 1: X")

  // TODO: for-in 루프를 사용하여 각 도시를 개별 줄에 출력

  // TODO: 빈 줄 출력
  print('');

  // TODO: 숫자를 위한 Storage<int> 생성
  // 네 개의 숫자 추가: 100, 200, 300, 400

  // TODO: where 메서드를 사용하여 150보다 큰 값 필터링
  // 그런 다음 toList()를 사용하여 결과 리스트 출력
}

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