기초클래스 협력

도서관 대출 시스템

Book과 Member 클래스 간의 협력을 통해 도서 대출과 반납 기능을 구현합니다. 객체 간 상호작용의 기본을 학습합니다.

클래스 설계객체 협력상태 관리

도서관 대출 시스템

📋 문제 설명

도서관의 도서 대출 시스템을 구현하는 프로그램을 작성하세요.

이 시스템은 BookMember 두 개의 클래스로 구성되며, 두 클래스 간의 협력을 통해 대출과 반납 기능을 구현합니다.


🎯 요구사항

1. Book 클래스 구현

속성 (필드)

  • String title - 책 제목
  • String author - 저자
  • boolean isAvailable - 대출 가능 여부

메서드

  • borrow() - 책을 대출하는 메서드 (대출 가능 여부를 false로 변경)
  • returnBook() - 책을 반납하는 메서드 (대출 가능 여부를 true로 변경)

2. Member 클래스 구현

속성 (필드)

  • String name - 회원 이름
  • Book borrowedBook - 대출한 책 (Book 객체 참조)

메서드

  • borrowBook(Book book) - 책을 빌리는 메서드
  • returnBook(Book book) - 책을 반납하는 메서드

3. 두 클래스 간 협력

⚠️ 중요: Member가 책을 빌리거나 반납할 때, Book의 상태도 함께 변경되어야 합니다.


💻 코드 구조

Book 클래스

Java
public class Book {
    private String title;
    private String author;
    private boolean isAvailable;

    // 생성자, getter, setter 메서드를 만드세요.

    public void borrow() {
        // 책을 대출 처리
        // isAvailable을 false로 변경
        // "책이 대출되었습니다" 메시지 출력
    }

    public void returnBook() {
        // 책을 반납 처리
        // isAvailable을 true로 변경
        // "책이 반납되었습니다" 메시지 출력
    }

    public void print() {
        // 책 정보 출력 (제목, 저자, 대출 가능 여부)
    }
}

Member 클래스

Java
public class Member {
    private String name;
    private Book borrowedBook;

    // 생성자, getter, setter 메서드를 만드세요

    public void borrowBook(Book book) {
        // 1. book이 대출 가능한지 확인 (isAvailable)
        // 2. 대출 가능하면 book.borrow() 호출
        // 3. borrowedBook에 book을 저장
        // 4. "[name]님이 [책 제목]을 대출했습니다" 메시지 출력
    }

    public void returnBook(Book book) {
        // 1. borrowedBook이 null이 아닌지 확인
        // 2. book.returnBook() 호출
        // 3. borrowedBook을 null로 설정
        // 4. "[name]님이 [책 제목]을 반납했습니다" 메시지 출력
    }

    public void print() {
        // 회원 정보 출력 (이름, 대출한 책)
    }
}

📝 과제

  1. 각 클래스에 print() 함수를 만드세요. 멤버변수를 화면에 출력하도록 만들면 됩니다.

  2. Main 클래스를 만들어 Book과 Member 객체를 생성하고 상호작용을 테스트하세요.

Java
public class Main {
    public static void main(String[] args) {
        // Book 객체 생성
        // Member 객체 생성
        // 대출 테스트
        // 반납 테스트
    }
}

💡 학습 포인트

  • 객체 간 협력: 한 객체의 메서드가 다른 객체의 메서드를 호출
  • 상태 관리: 책의 대출 가능 여부를 적절히 관리
  • 참조 변수: Member가 Book 객체를 참조하여 저장