Menu
Coddy logo textTech

정리 - 커스텀 컬렉션

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

challenge icon

챌린지

쉬움

플레이어 점수를 추적하고 특수 메서드들이 어떻게 함께 작동하여 세련되고 전문적인 클래스를 만드는지 보여주는 ScoreBoard 시스템을 만들어 봅시다!

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

  • score_board.dart: 게임 점수를 관리하기 위해 함께 작동하는 Player 클래스와 ScoreBoard 클래스를 만듭니다.

    Player 클래스는 name (String)과 score (int)를 가져야 합니다. 다음 사항이 필요합니다:

    • Comparable<Player>를 구현하여 플레이어를 점수 내림차순(높은 순서)으로 정렬할 수 있도록 합니다.
    • ==hashCode를 오버라이드하여 이름이 같은 두 플레이어는 (점수에 상관없이) 동일한 것으로 간주되도록 합니다.
    • toString()을 오버라이드하여 [name]: [score] points를 반환하도록 합니다.

    ScoreBoard 클래스는 플레이어 목록을 저장하고 다음을 제공해야 합니다:

    • 플레이어가 아직 존재하지 않는 경우에만 추가하는 addPlayer(Player player) 메서드 (구현한 동등성 비교를 사용하세요!)
    • 인수를 받지 않고 정렬된 플레이어 목록의 복사본(점수 높은 순서로 정렬됨)을 반환하는 call() 메서드
    • toString()을 오버라이드하여 첫 번째 줄에 ScoreBoard: 헤더와 함께 모든 플레이어(정렬되지 않음)를 한 줄에 하나씩 표시합니다.
  • main.dart: 스코어보드 파일을 임포트하고 이러한 모든 특수 메서드가 어떻게 함께 작동하는지 보여줍니다:
    • ScoreBoard를 생성합니다.
    • 다음 플레이어들을 추가합니다: Alice (150), Bob (200), Charlie (175)
    • Alice를 점수 999로 다시 추가해 봅니다 (중복으로 거부되어야 합니다).
    • toString()을 사용하여 스코어보드를 출력합니다.
    • 빈 줄을 출력합니다.
    • Rankings:를 출력합니다.
    • 스코어보드를 함수처럼 호출하여 정렬된 순위를 얻은 다음, 각 플레이어를 출력합니다.

이 챌린지는 표시를 위한 toString(), 중복 감지를 위한 ==hashCode, 정렬을 위한 compareTo(), 그리고 깔끔한 호출 가능 인터페이스를 위한 call()을 한데 모았습니다!

예상 출력:

ScoreBoard:
Alice: 150 points
Bob: 200 points
Charlie: 175 points

Rankings:
Bob: 200 points
Charlie: 175 points
Alice: 150 points

직접 해보기

import 'score_board.dart';

void main() {
  // TODO: ScoreBoard 생성

  // TODO: 플레이어 추가: Alice (150), Bob (200), Charlie (175)

  // TODO: Alice를 점수 999로 다시 추가 시도 (중복으로 거부되어야 함)

  // TODO: toString()을 사용하여 스코어보드 출력

  // TODO: 빈 줄 출력

  // TODO: "Rankings:" 출력

  // TODO: 스코어보드를 함수처럼 호출하여 정렬된 순위를 가져온 후, 각 플레이어를 출력
}

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