Menu
Coddy logo textTech

도서 및 사용자 클래스

Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 87개 중 78번째.

challenge icon

챌린지

쉬움

이전 수업에서 만든 BookUser 클래스를 확장하여 Library Management System을 계속 구축해 보겠습니다. 이제 사용자가 책을 빌릴 수 있는 기능을 추가하여 이 두 엔터티 사이에 실제 연결을 만들어 보겠습니다.

코드는 세 개의 파일로 구성합니다.

  • Book.java: 이전 챌린지에서 만든 Book 클래스를 개선합니다. 기존의 모든 기능(isbn, title, author, getter/setter가 있는 isAvailable 및 getDetails())을 유지합니다. 이제 책을 빌린 사용자의 ID(또는 빌리지 않은 경우 null)를 저장하는 String 타입의 private field borrowedBy를 추가합니다. borrowedBy에 대한 getter와 isAvailable을 그에 맞게 업데이트하는 setter를 추가합니다. 책을 빌리면(borrowedBy가 null이 아닌 값으로 설정되면) 책을 사용할 수 없게 되고, 반납하면(null로 설정되면) 다시 사용할 수 있게 됩니다.
  • User.java: 빌린 책을 추적하도록 User 클래스를 확장합니다. 기존의 id, name, Constructor, getter 및 toString()을 유지합니다. borrowedBooks라는 이름의 private ArrayList<Book> field를 추가하고(Constructor에서 Initialize)합니다. 책을 사용자의 목록에 추가하고 해당 책의 borrowedBy를 이 사용자의 ID로 설정하는 borrowBook(Book book) method를 Create합니다. 목록에서 책을 제거하고 borrowedBy를 null로 설정하는 returnBook(Book book) method를 Create합니다. 사용자가 currently 가지고 있는 책의 수를 반환하는 getBorrowedCount() method를 추가합니다.
  • Main.java: borrow 시스템이 작동하는 모습을 보여 줍니다. 다섯 개의 입력을 받습니다. 책의 ISBN, title, author, 그리고 user ID와 name입니다.

    이 입력으로 Book과 User를 Create합니다. 책의 details와 availability 상태를 출력합니다. 그런 다음 사용자가 책을 borrow하도록 합니다. 책의 availability를 다시 출력한 다음, Borrowed by: [userId] format으로 누가 책을 빌렸는지 출력합니다. [name] has [count] book(s) format으로 사용자가 가진 책의 수를 출력합니다. 마지막으로 사용자가 책을 return하도록 하고 availability를 한 번 더 출력합니다.

다음 순서로 다섯 개의 입력을 받습니다. ISBN (String), title (String), author (String), user ID (String), user name (String)입니다.

예를 들어 입력이 978-0-13-468599-1, Effective Java, Joshua Bloch, U001, Alice인 경우 출력은 다음과 같습니다.

[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
Available: false
Borrowed by: U001
Alice has 1 book(s)
Available: true

이 챌린지는 이전 작업을 직접 기반으로 하며, library 시스템을 functional하게 만드는 books와 users 사이의 중요한 relationship을 추가합니다. composition(User "has" Books)을 사용하고, 잘 설계된 method를 통해 한 object의 changes가 다른 object에 어떤 영향을 줄 수 있는지 확인하게 됩니다.

직접 해보기

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 도서 정보 읽기
        String isbn = scanner.nextLine();
        String title = scanner.nextLine();
        String author = scanner.nextLine();
        
        // 사용자 정보 읽기
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // isbn, title, author로 Book 객체 생성하기
        Book book = new Book(isbn, title, author);
        
        // userId와 userName으로 User 객체 생성하기
        User user = new User(userId, userName);
        
        // getDetails()를 사용하여 도서의 상세 정보 출력하기
        System.out.println(book.getDetails());
        
        // Print whether the book is available (format: "Available: true" or "Available: false")
        System.out.println("Available: " + book.isAvailable());
        
        // 사용자가 도서를 대출하도록 하기
        user.borrowBook(book);
        
        // 도서의 대출 가능 여부 다시 출력하기
        System.out.println("Available: " + book.isAvailable());
        
        // 누가 대출했는지 출력하기
        System.out.println("Borrowed by: " + book.getBorrowedBy());
        
        // 사용자가 대출한 도서 수 출력하기
        System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
        
        // 사용자가 도서를 반납하도록 하기
        user.returnBook(book);
        
        // 대출 가능 여부를 한 번 더 출력하기
        System.out.println("Available: " + book.isAvailable());
    }
}

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

직접 연습해 보세요: 온라인 Java 컴파일러