Menu
Coddy logo textTech

도서 및 사용자 클래스

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

challenge icon

챌린지

쉬움

이전 레슨의 BookUser 클래스를 확장하여 도서관 관리 시스템을 계속 구축해 보겠습니다. 이제 사용자가 책을 빌릴 수 있는 기능을 추가하여 이 두 엔티티 사이에 실제 연결을 만들어 보겠습니다.

코드는 세 개의 파일로 구성됩니다:

  • Book.java: 이전 챌린지의 Book 클래스를 개선합니다. 기존의 모든 기능(isbn, title, author, getter/setter가 포함된 isAvailable, getDetails())을 유지합니다. 이제 책을 빌린 사용자의 ID를 저장하는 String 타입의 private 필드 borrowedBy를 추가합니다(빌리지 않은 경우 null). borrowedBy에 대한 getter를 추가하고, isAvailable도 그에 따라 업데이트하는 setter를 추가합니다. 책을 빌릴 때(borrowedBy가 null이 아닌 값으로 설정될 때)는 대출 불가능 상태가 되고, 반납될 때(null로 설정될 때)는 다시 대출 가능 상태가 됩니다.
  • User.java: 대출된 책을 추적하도록 User 클래스를 확장합니다. 기존의 id, name, 생성자, getter 및 toString()을 유지합니다. borrowedBooks라는 이름의 private ArrayList<Book> 필드를 추가합니다(생성자에서 초기화). 책을 사용자의 리스트에 추가하고 해당 책의 borrowedBy를 이 사용자의 ID로 설정하는 borrowBook(Book book) 메서드를 만듭니다. 리스트에서 책을 제거하고 borrowedBy를 null로 설정하는 returnBook(Book book) 메서드를 만듭니다. 사용자가 현재 가지고 있는 책의 권수를 반환하는 getBorrowedCount() 메서드를 추가합니다.
  • Main.java: 대출 시스템이 작동하는 모습을 보여줍니다. ISBN, 제목, 저자 정보와 사용자 ID, 이름까지 총 5개의 입력을 받습니다.

    이 입력값들로 Book과 User를 생성합니다. 책의 상세 정보와 대출 가능 상태를 출력합니다. 그런 다음 사용자가 책을 빌리게 합니다. 책의 대출 가능 상태를 다시 출력하고, 이어서 Borrowed by: [userId] 형식으로 누가 빌렸는지 출력합니다. [name] has [count] book(s) 형식으로 사용자가 몇 권의 책을 가지고 있는지 출력합니다. 마지막으로 사용자가 책을 반납하게 하고 대출 가능 상태를 한 번 더 출력합니다.

ISBN (String), 제목 (String), 저자 (String), 사용자 ID (String), 사용자 이름 (String) 순서로 5개의 입력을 받게 됩니다.

예를 들어, 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

이 챌린지는 이전 작업을 직접적으로 기반으로 하며, 도서관 시스템을 기능적으로 만드는 책과 사용자 사이의 중요한 관계를 추가합니다. 구성(Composition, User가 Book을 "가짐")을 사용하고 잘 설계된 메서드를 통해 한 객체의 변경이 다른 객체에 어떻게 영향을 미치는지 확인하게 될 것입니다!

직접 해보기

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());
        
        // 도서 대출 가능 여부 출력 (형식: "Available: true" 또는 "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());
    }
}

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