도서 및 사용자 클래스
Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 87개 중 78번째.
챌린지
쉬움이전 수업에서 만든 Book 및 User 클래스를 확장하여 Library Management System을 계속 구축해 보겠습니다. 이제 사용자가 책을 빌릴 수 있는 기능을 추가하여 이 두 엔터티 사이에 실제 연결을 만들어 보겠습니다.
코드는 세 개의 파일로 구성합니다.
Book.java: 이전 챌린지에서 만든 Book 클래스를 개선합니다. 기존의 모든 기능(isbn, title, author, getter/setter가 있는 isAvailable 및getDetails())을 유지합니다. 이제 책을 빌린 사용자의 ID(또는 빌리지 않은 경우null)를 저장하는String타입의 private fieldborrowedBy를 추가합니다.borrowedBy에 대한 getter와isAvailable을 그에 맞게 업데이트하는 setter를 추가합니다. 책을 빌리면(borrowedBy가 null이 아닌 값으로 설정되면) 책을 사용할 수 없게 되고, 반납하면(null로 설정되면) 다시 사용할 수 있게 됩니다.User.java: 빌린 책을 추적하도록 User 클래스를 확장합니다. 기존의 id, name, Constructor, getter 및toString()을 유지합니다.borrowedBooks라는 이름의 privateArrayList<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());
}
}객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조직접 연습해 보세요: 온라인 Java 컴파일러