본문 바로가기

JAVA

[Java] Lv_2 도서관 프로젝트

요구사항

  • ⬜ 여러 권의 도서를 저장할 수 있어야 한다.
  • ⬜ 전체 도서 목록을 출력할 수 있어야 한다.
  • ⬜ 새로운 도서를 추가할 수 있어야 한다.

 


 

 

문제 풀이

Main

더보기
package lv_2;

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {
        Library library = new Library(new ArrayList<>());
        library.addBook(new Book("The Little Prince", "Antoine de Saint-Exupéry", 1943));
        library.addBook(new Book("Cinderella", "Charles Perrault", 1697));

        library.findAndPrintBookByTitle("Harry Potter");
        library.printAllBook();
    }
}
  • 생성자로 ArrayList 구현체를 넘겨주면서 Library 객체를 생성한다.
  • library의 addBook() 메서드를  통해 책 객체를 생성과 동시에 리스트에 넣어준다.

 

 

Library

더보기
package lv_2;

import java.util.List;

public class Library {
    private final List<Book> bookList;

    public Library(List<Book> bookList) {
        this.bookList = bookList;
    }

    public void addBook(Book book) {
        bookList.add(book);
    }

    public void findAndPrintBookByTitle(String title) {
        for(Book book : bookList) {
            if(book.getTitle().equalsIgnoreCase(title)) {
                System.out.println(book);
                return;
            }
        }
        System.out.println(title + "은/는 존재하지 않는 책입니다.");
    }

    public void printAllBook() {
        System.out.println("[ 전체 책 목록 ]");
        for(Book book : bookList) {
            System.out.println(book);
        }
    }
}
  • 도서를 저장/관리하는 클래스를 만들었다.
  • 도서 추가, 도서 정보 출력, 모든 도서 정보 출력의 기능을하는 메서드가 있다.

 

 

Book

더보기
package lv_2;

public class Book {
    private String title;
    private String author;
    private int publishYear;

    public Book(String title, String author, int publishYear) {
        this.title = title;
        this.author = author;
        this.publishYear = publishYear;
    }

    public String getTitle() {
        return title;
    }

    @Override
    public String toString() {
        return String.format(
            "제목 : %-20s | 
             저자 : %-30s | 
             출판 연도 : %-13s",
             title,
             author,
             publishYear
         );
    }
}

 

 


 

 

 

객체의 역할과 책임

Main Libray Book
Library 객체 생성 책을 리스트에 저장 책의 정보를 보관한다.
Book 객체 생성 특정 책 정보를 출력 자기 자신의 정보를 문자열로 표현한다.
전체 흐름 처 전체 책 정보를 출력  

 

 

 


 

 

 

실행 흐름

실행 흐름

 

 

 


 

 

 

GPT 분석

출력 책임 분리 고려

  • `Library`는 데이터 관리, 출력은 `LibraryPrinter` 등 별도 클래스로 분리 가능
    → 관심사 분리에 따른 SRP 개선 가능 (Lv4~Lv5에서 고려해도 충분)

책 검색과 출력 책임 분리

  • `findAndPrintBookByTitle()` 메서드를 `findBookByTitle()`과 `printBook()`으로 분리할 수도 있음.

'JAVA' 카테고리의 다른 글

[Java] Lv_4 도서관 프로젝트  (0) 2025.05.02
[Java] Lv_3 도서관 프로젝트  (0) 2025.05.02
[Java] Lv_1 도서관 프로젝트  (0) 2025.05.01
[Java] 도전 과제 Lv_2 키오스크  (0) 2025.04.28
[Java] 제네릭(Generic), 왜 사용할까?  (0) 2025.04.28