프로그래밍 언어/Java

자바 미니 프로젝트 — 자바로 도서 관리 프로그램 만들기(Java 기초)

테크위키 2026. 3. 22. 20:30
반응형

미니 프로젝트 — 자바로 도서 관리 프로그램 만들기

드디어 마지막 편이에요! 🎉
지금까지 배운 변수, 조건문, 반복문, 배열, 메서드, 클래스, 객체를 모두 활용해서
실제로 동작하는 도서 관리 프로그램을 처음부터 끝까지 만들어볼게요!


📌 이 글에서 만들 것

오늘 만들 프로젝트는 콘솔 도서 관리 시스템이에요.

  • 도서를 추가할 수 있어요.
  • 전체 도서 목록을 조회할 수 있어요.
  • 도서를 제목으로 검색할 수 있어요.
  • 도서를 삭제할 수 있어요.

전체 코드

Book.java — 도서 클래스

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

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

    public String getTitle() { return title; }
    public String getAuthor() { return author; }
    public int getYear() { return year; }

    public void printInfo() {
        System.out.printf("📖 %-20s | %-10s | %d년%n", title, author, year);
    }
}

Library.java — 도서관 클래스

import java.util.ArrayList;

public class Library {
    private ArrayList<Book> books = new ArrayList<>();

    // 도서 추가
    public void addBook(String title, String author, int year) {
        books.add(new Book(title, author, year));
        System.out.println("✅ \"" + title + "\" 추가 완료!\n");
    }

    // 전체 도서 출력
    public void showAll() {
        if (books.isEmpty()) {
            System.out.println("등록된 도서가 없어요.\n");
            return;
        }

        System.out.println("=== 전체 도서 목록 (" + books.size() + "권) ===");
        for (int i = 0; i < books.size(); i++) {
            System.out.print((i + 1) + ". ");
            books.get(i).printInfo();
        }
        System.out.println();
    }

    // 도서 검색
    public void searchBook(String keyword) {
        System.out.println("=== \"" + keyword + "\" 검색 결과 ===");
        boolean found = false;

        for (Book book : books) {
            if (book.getTitle().contains(keyword) || book.getAuthor().contains(keyword)) {
                book.printInfo();
                found = true;
            }
        }

        if (!found) {
            System.out.println("검색 결과가 없어요.");
        }
        System.out.println();
    }

    // 도서 삭제
    public void removeBook(String title) {
        for (int i = 0; i < books.size(); i++) {
            if (books.get(i).getTitle().equals(title)) {
                books.remove(i);
                System.out.println("🗑️ \"" + title + "\" 삭제 완료!\n");
                return;
            }
        }
        System.out.println("해당 도서를 찾을 수 없어요.\n");
    }
}

Main.java — 메인 실행 클래스

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Library library = new Library();
        Scanner scanner = new Scanner(System.in);

        // 초기 데이터
        library.addBook("자바의 정석", "남궁성", 2022);
        library.addBook("클린 코드", "로버트 마틴", 2013);
        library.addBook("객체지향의 사실과 오해", "조영호", 2015);

        System.out.println("📚 자바 도서 관리 시스템에 오신 걸 환영해요!\n");

        while (true) {
            System.out.println("무엇을 할까요?");
            System.out.println("1. 도서 추가");
            System.out.println("2. 전체 목록 보기");
            System.out.println("3. 도서 검색");
            System.out.println("4. 도서 삭제");
            System.out.println("5. 종료");
            System.out.print("\n번호를 입력하세요: ");

            String choice = scanner.nextLine().trim();

            switch (choice) {
                case "1":
                    System.out.print("제목: ");
                    String title = scanner.nextLine();
                    System.out.print("저자: ");
                    String author = scanner.nextLine();
                    System.out.print("출판 연도: ");
                    int year = Integer.parseInt(scanner.nextLine());
                    library.addBook(title, author, year);
                    break;

                case "2":
                    library.showAll();
                    break;

                case "3":
                    System.out.print("검색어 (제목 또는 저자): ");
                    String keyword = scanner.nextLine();
                    library.searchBook(keyword);
                    break;

                case "4":
                    System.out.print("삭제할 도서 제목: ");
                    String removeTitle = scanner.nextLine();
                    library.removeBook(removeTitle);
                    break;

                case "5":
                    System.out.println("프로그램을 종료해요. 수고하셨어요! 👋");
                    scanner.close();
                    return;

                default:
                    System.out.println("1~5 중에서 선택해주세요.\n");
            }
        }
    }
}

실행 예시

📚 자바 도서 관리 시스템에 오신 걸 환영해요!

번호를 입력하세요: 2
=== 전체 도서 목록 (3권) ===
1. 📖 자바의 정석             | 남궁성     | 2022년
2. 📖 클린 코드               | 로버트 마틴 | 2013년
3. 📖 객체지향의 사실과 오해   | 조영호     | 2015년

번호를 입력하세요: 3
검색어 (제목 또는 저자): 자바
=== "자바" 검색 결과 ===
📖 자바의 정석             | 남궁성     | 2022년

코드에서 배운 개념 찾아보기

코드 배운 편
class Book { ... } 9편 (클래스와 객체)
private, getter/setter 9편 (캡슐화)
ArrayList<Book> 7편 (ArrayList)
for (Book book : books) 7편 (for-each)
public void addBook(...) 8편 (메서드)
switch (choice) 5편 (조건문)
while (true) 6편 (반복문)
String title = "..." 3편 (변수와 자료형)

🚀 다음 단계로 나아가고 싶다면?

이 시리즈를 완주하셨으면 기초는 탄탄해요! 다음엔 이런 걸 공부해보세요.

  • 상속과 다형성 — 객체 지향의 꽃
  • 인터페이스 — 설계를 더 유연하게
  • 예외 처리 — try/catch로 오류 다루기
  • 파일 입출력 — 데이터를 파일로 저장하기
  • Spring Boot — 자바로 웹 서버 만들기

10편 시리즈 완주를 축하해요! 🎊

주제 핵심 개념
1편 자바 소개 왜 자바인가
2편 설치 & 환경 세팅 JDK, IntelliJ
3편 변수와 자료형 int, String, boolean
4편 연산자와 문자열 산술, 비교, String 메서드
5편 조건문 if, switch, 삼항 연산자
6편 반복문 for, while, break, continue
7편 배열과 ArrayList [], ArrayList
8편 메서드 반환값, 매개변수, 오버로딩
9편 클래스와 객체 생성자, getter/setter
10편 미니 프로젝트 종합 실습

처음엔 긴 문법이 낯설게 느껴졌겠지만, 이제 자바가 조금 친숙해지셨나요?
자바의 세계는 훨씬 더 넓어요. 오늘 배운 기초가 그 출발점이 될 거예요. 화이팅! ☕


시리즈를 끝까지 읽어주셔서 감사해요 😊 궁금한 점은 언제든지 댓글로 남겨주세요!