Menu
Coddy logo textTech

이러닝 플랫폼

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

challenge icon

챌린지

쉬움

이 과정에서 익힌 모든 OOP 개념을 하나로 모으는 E-Learning 플랫폼을 구축해 보겠습니다. 추상 클래스, 상속, 믹스인(mixin), 캡슐화를 사용하여 사용자, 강좌 및 등록을 관리하는 시스템을 만들게 됩니다.

플랫폼은 다음 다섯 개의 파일로 구성됩니다:

  • user.dart: _id (String) 및 _name (String)에 대한 프라이빗 필드와 퍼블릭 게터(getter)를 가진 추상 클래스 User를 생성하세요. 하위 클래스에서 반드시 구현해야 하는 추상 메서드 String getRole()을 포함하세요. toString()을 오버라이드하여 [role] name (id) 형식을 반환하도록 하세요. 여기서 role은 getRole()에서 가져옵니다.
  • student.dart: User를 상속받는 Student 클래스를 생성하세요. 학생은 이 파일에 정의된 ProgressTracking 믹스인을 사용해야 합니다. 이 믹스인은 0으로 시작하는 프라이빗 _completedLessons 정수 필드와 게터, 이를 증가시키는 completeLesson() 메서드, 그리고 Completed X lessons를 반환하는 getProgressReport() 메서드를 제공합니다. Student 클래스는 getRole()을 구현하여 Student를 반환해야 합니다.
  • instructor.dart: User를 상속받는 Instructor 클래스를 생성하세요. 강사는 프라이빗 리스트 _coursesCreated(강좌 제목을 나타내는 String 리스트)를 가집니다. 리스트에 제목을 추가하고 해당 제목을 반환하는 createCourse(String title) 메서드를 포함하세요. getRole()을 구현하여 Instructor를 반환하세요. 생성된 강좌 수를 반환하는 courseCount 게터를 추가하세요.
  • enrollment.dart: 학생의 강좌 등록을 추적하는 Enrollment 클래스를 생성하세요. studentId (String), courseName (String), 그리고 기본값이 false인 프라이빗 _isCompleted 불리언 필드와 게터를 가져야 합니다. 완료 상태를 true로 설정하는 markComplete() 메서드를 포함하세요. toString()을 오버라이드하여 완료 상태에 따라 studentId enrolled in "courseName" - Status: Completed 또는 Status: In Progress를 반환하도록 하세요.
  • main.dart: 모든 것을 하나로 묶습니다. 강사(I001, Dr. Smith)를 생성하고 Dart FundamentalsAdvanced OOP라는 두 개의 강좌를 만들게 하세요. 강사 정보와 강좌 수를 Courses created: X 형식으로 출력하세요. 학생(S001, Alice)을 생성하여 출력한 다음, 3개의 레슨을 완료하게 하고 진행 보고서(progress report)를 출력하세요. Alice의 Dart Fundamentals 강좌 등록 정보를 생성하여 출력하고, 완료로 표시한 후 다시 출력하세요.

예상 출력 결과:

[Instructor] Dr. Smith (I001)
Courses created: 2
[Student] Alice (S001)
Completed 3 lessons
S001 enrolled in "Dart Fundamentals" - Status: In Progress
S001 enrolled in "Dart Fundamentals" - Status: Completed

직접 해보기

import 'user.dart';
import 'student.dart';
import 'instructor.dart';
import 'enrollment.dart';

void main() {
  // TODO: ID가 "I001"이고 이름이 "Dr. Smith"인 강사(instructor)를 생성하세요.
  
  // TODO: 강사가 "Dart Fundamentals"와 "Advanced OOP"라는 두 개의 강의를 생성하도록 하세요.
  
  // TODO: 강사 정보를 출력하세요 (toString() 사용)
  
  // TODO: "Courses created: X"를 출력하세요 (X는 courseCount입니다)
  
  // TODO: ID가 "S001"이고 이름이 "Alice"인 학생(student)을 생성하세요.
  
  // TODO: 학생 정보를 출력하세요.
  
  // TODO: 학생이 3개의 레슨을 완료하도록 하세요 (completeLesson()을 3번 호출)
  
  // TODO: 학생의 진도 보고서(progress report)를 출력하세요.
  
  // TODO: "Dart Fundamentals" 강의에 Alice(S001)를 등록(enrollment)시키세요.
  
  // TODO: 등록 정보를 출력하세요.
  
  // TODO: 등록 상태를 완료(complete)로 표시하세요.
  
  // TODO: 등록 정보를 다시 출력하세요.
}

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