2025-09-01 미니프로젝트 회고

Ckd gus·2026년 2월 2일

📚 미니 프로젝트 회고 – 도서 관리 시스템 (CLI)

오늘은 금요일부터 만든 미니 프로젝트에 관해 코드를 정리하고 리뷰하는 시간을 가져본다.
내가 만든 프로그램은 도서 관리 시스템으로, 콘솔에서 숫자를 입력받아 원하는 작업으로 이동해 처리하는 CLI 프로그램이다.


🧾 프로젝트 개요

도서 관리 시스템

  • 콘솔에서 숫자를 입력받아 원하는 기능으로 이동
  • 입력값에 따라 도서 / 회원 / 관리자 기능 처리

🗂 클래스 구분

  1. Book, User 클래스
    • 데이터 구조 정의
  2. Repository
    • 데이터 생성 / 삭제 메서드 관리
  3. 기능 클래스
    • 기능 단위 메서드 구현
  4. Main
    • 전체 흐름 제어

⌨ 입력값에 따른 작업

  1. 도서 검색
  2. 도서 전체 목록
  3. 관리자 페이지
    • 3-1. 도서 추가
    • 3-2. 도서 삭제
    • 3-3. 회원 리스트 출력
    • 3-4. 뒤로가기
  4. 회원 정보 추가
  5. 회원 정보 삭제
  6. 종료 (break)

📘 Book 클래스

package Mini_Project;

import java.util.Objects;

public class Book {
    private String name;
    private String author;
    private int price;
    private boolean existence;

    public Book(String name, String author, boolean existence, int price) {
        this.name = name;
        this.author = author;
        this.existence = existence;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Object o) {
        if (!(o instanceof Book bookSet)) return false;
        return existence == bookSet.existence &&
               Objects.equals(name, bookSet.name) &&
               Objects.equals(author, bookSet.author) &&
               price == bookSet.price;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, author, price, existence);
    }

    @Override
    public String toString() {
        return "제목 : " + name +
               "\t| 저자 : " + author +
               "\t| 구매가능 : " + existence +
               "\t| 가격 : " + price;
    }
}

📚 BookRepository

package Mini_Project;

import java.util.ArrayList;
import java.util.List;

public class BookRepository {
    private static List<Book> books = new ArrayList<>();

    static {
        books.add(new Book("해리포터", "JK롤링", true, 20000));
        books.add(new Book("노인과 바다", "허밍웨이", true, 30000));
        books.add(new Book("셜록홈즈", "코난 도일", true, 50000));
    }

    public static List<Book> getBooks() {
        return books;
    }

    public static Book findBook(String name) {
        for (Book b : books) {
            if (b.getName().trim().equals(name)) {
                return b;
            }
        }
        return null;
    }

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

    public static void remove(Book book) {
        books.remove(book);
    }
}

🔍 BookSearch

package Mini_Project;

public class BookSerach {
    public void serach(String title) {
        Book book = BookRepository.findBook(title);
        if (book != null) {
            System.out.println("검색결과 : " + book);
        } else {
            System.out.println("해당 책이 존재하지 않습니다.");
        }
    }
}

📖 BookList

package Mini_Project;

public class BookList {
    public void showAll() {
        System.out.println("=== 도서 목록 ===");
        for (Book b : BookRepository.getBooks()) {
            System.out.println(b);
        }
    }
}

👤 User 클래스

package Mini_Project;

import java.util.Objects;

public class User {
    private String name;
    private int age;
    private String birthday;

    public User(String name, int age, String birthday) {
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Object o) {
        if (!(o instanceof User user)) return false;
        return age == user.age &&
               Objects.equals(name, user.name) &&
               Objects.equals(birthday, user.birthday);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, birthday);
    }

    @Override
    public String toString() {
        return "회원정보 : 이름 - " + name +
               "\t나이 : " + age +
               "\t생년월일 : " + birthday;
    }
}

👥 UserRepository

package Mini_Project;

import java.util.ArrayList;
import java.util.List;

public class UserRepostiory {
    private static List<User> users = new ArrayList<>();

    static {
        users.add(new User("홍길동", 20, "070215-2222222"));
        users.add(new User("구창현", 22, "041030-1111111"));
    }

    public static void useradd(User user) {
        users.add(user);
    }

    public static void userdel(User user) {
        users.remove(user);
    }

    public static List<User> getuser() {
        return users;
    }
}

🛠 AdminPage

package Mini_Project;

import java.util.Scanner;

public class AdminPage {
    public void addBook() {
        Scanner sc = new Scanner(System.in);
        System.out.print("책 제목: ");
        String title = sc.nextLine();
        System.out.print("저자: ");
        String author = sc.nextLine();
        System.out.print("존재 여부(true/false): ");
        boolean have = sc.nextBoolean();
        System.out.print("가격: ");
        int price = sc.nextInt();

        BookRepository.addBook(new Book(title, author, have, price));
        System.out.println("책 저장 완료");
    }

    public void removeBook() {
        Scanner sc = new Scanner(System.in);
        System.out.print("책 제목: ");
        String title = sc.nextLine();
        System.out.print("저자: ");
        String author = sc.nextLine();
        System.out.print("존재 여부(true/false): ");
        boolean have = sc.nextBoolean();
        System.out.print("가격: ");
        int price = sc.nextInt();

        BookRepository.remove(new Book(title, author, have, price));
        System.out.println("책 삭제 완료");
    }
}

▶ Main

package Mini_Project;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        BookList bookList = new BookList();
        BookSerach bookSerach = new BookSerach();
        AdminPage admin = new AdminPage();
        UserPage userPage = new UserPage();

        while (true) {
            System.out.println("\n===== 메뉴 선택 =====");
            System.out.println("1. 도서 검색");
            System.out.println("2. 도서 전체보기");
            System.out.println("3. 관리자 페이지");
            System.out.println("4. 회원가입");
            System.out.println("5. 회원탈퇴");
            System.out.println("0. 종료");

            int input = scanner.nextInt();
            scanner.nextLine();

            if (input == 0) {
                System.out.println("프로그램 종료");
                break;
            }

            switch (input) {
                case 1 -> {
                    System.out.print("도서 제목 입력: ");
                    String title = scanner.next();
                    bookSerach.serach(title);
                }
                case 2 -> bookList.showAll();
                case 4 -> userPage.adduser();
                case 5 -> userPage.delUser();
                case 3 -> {
                    System.out.println("1. 도서 추가 | 2. 도서 삭제 | 3. 유저 리스트 | 4. 뒤로가기");
                    int adminInput = scanner.nextInt();
                    scanner.nextLine();
                    switch (adminInput) {
                        case 1 -> admin.addBook();
                        case 2 -> admin.removeBook();
                        case 3 -> userPage.userlist();
                        case 4 -> System.out.println("뒤로가기");
                    }
                }
            }
        }
    }
}

✍ 느낀 점

처음 진행한 프로젝트라 구조 설계와 클래스 간 연결이 쉽지 않았다.
알고리즘 문제처럼 메인에서만 처리하던 습관 때문에 추상화 단계에서 고민이 부족했던 점이 아쉽다.

다른 사람들의 발표를 보며 if/else로도 충분히 처리할 수 있었던 부분,
예외 처리 방식 등에서 많은 영감을 받았다.

막힌 문제를 하나씩 해결해 나가는 과정이 가장 재미있었고,
다음에 비슷한 프로젝트를 한다면 훨씬 더 잘할 수 있을 것 같다.

profile
백엔드 공부중입니다.

0개의 댓글