요구사항
- ⬜ 여러 권의 도서를 저장할 수 있어야 한다.
- ⬜ 전체 도서 목록을 출력할 수 있어야 한다.
- ⬜ 새로운 도서를 추가할 수 있어야 한다.
문제 풀이
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 |