학생-강의 수강 시스템
📋 문제 설명
학생과 강의 클래스를 설계하고, 수강 신청과 취소 기능을 구현하는 시스템을 만드세요.
⚠️ 정원 제한 로직을 포함하여 실무적인 수강 신청 시스템을 학습합니다.
🎯 클래스 구조
Student 클래스
필드 (멤버변수)
String name- 학생 이름String studentId- 학번Lecture registeredLecture- 수강 중인 강의
Lecture 클래스
필드 (멤버변수)
String lectureName- 강의명int maxStudents- 최대 수강 인원int currentStudents- 현재 수강 인원
💻 코드 구조
Student 클래스
Java
public class Student {
private String name;
private String studentId;
private Lecture registeredLecture;
// 생성자
public Student(String name, String studentId) {
// 학생의 이름과 학번을 초기화합니다.
}
public boolean registerLecture(Lecture lecture) {
// 1. 이미 수강 중인 강의가 있는지 확인합니다.
// 2. 수강 중인 강의가 없다면, 주어진 강의에 학생을 등록합니다.
// (lecture.addStudent() 메서드 호출)
// 3. 강의 등록이 성공하면 registeredLecture를 업데이트하고 true를 반환합니다.
// 4. 실패하면 (이미 수강 중이거나 강의가 가득 찼을 경우) false를 반환합니다.
}
public boolean cancelLecture() {
// 1. 현재 수강 중인 강의가 있는지 확인합니다.
// 2. 수강 중인 강의가 있다면, 해당 강의에서 학생을 제거합니다.
// (lecture.removeStudent() 메서드 호출)
// 3. registeredLecture를 null로 설정합니다.
// 4. 취소가 성공하면 true, 실패하면 false를 반환합니다.
}
public void printInfo() {
// 학생의 이름, 학번을 출력합니다.
// 수강 중인 강의가 있다면 강의명도 출력합니다.
// 수강 중인 강의가 없다면 "수강 중인 강의 없음"을 출력합니다.
}
}
Lecture 클래스
Java
public class Lecture {
private String lectureName;
private int maxStudents;
private int currentStudents;
// 생성자
public Lecture(String lectureName, int maxStudents) {
// 강의명과 최대 수강 인원을 초기화합니다.
// currentStudents는 0으로 초기화합니다.
}
public boolean addStudent() {
// 1. 현재 수강 인원이 최대 인원보다 적은지 확인합니다.
// 2. 여유가 있다면 currentStudents를 1 증가시키고 true를 반환합니다.
// 3. 강의가 이미 가득 찼다면 false를 반환합니다.
}
public boolean removeStudent() {
// 1. 현재 수강 인원이 0보다 큰지 확인합니다.
// 2. 수강 중인 학생이 있다면 currentStudents를 1 감소시키고 true를 반환합니다.
// 3. 수강 중인 학생이 없다면 false를 반환합니다.
}
public void printInfo() {
// 강의명, 현재 수강 인원, 최대 수강 인원을 출력합니다.
// 예: "강의: Java 프로그래밍, 수강 인원: 15/20"
}
}
✅ 실습 조건
필수 요구사항
-
클래스 간 협력
- Student가 Lecture를 등록/취소할 때 Lecture의 학생 수가 자동으로 변경되어야 함
-
수강 인원 제한
- 최대 수강 인원을 20명으로 설정
- 초과하면 등록할 수 없도록 처리
-
검증 로직
- 이미 수강 중인 강의가 있으면 새로운 강의 등록 불가
- 수강 중인 강의가 없으면 취소 불가
📝 테스트 시나리오
Main 클래스에서 다음 시나리오를 테스트하세요:
Java
public class Main {
public static void main(String[] args) {
// 1. Lecture 객체 생성 (최대 20명)
// 2. Student 객체 여러 개 생성
// 3. 정상 수강 신청 테스트
// 4. 중복 수강 신청 시도 (실패해야 함)
// 5. 수강 취소 테스트
// 6. 정원 초과 테스트 (20명 이상 등록 시도)
}
}
💡 학습 포인트
- 비즈니스 로직 구현: 실제 수강신청 시스템처럼 제약 조건 처리
- 객체 간 협력: Student와 Lecture가 서로의 메서드를 호출
- 상태 관리: 수강 인원을 정확하게 추적
- 유효성 검증: 중복 등록, 정원 초과 등을 사전에 체크