오늘은 금요일부터 만든 미니 프로젝트에 관해 코드를 정리하고 리뷰하는 시간을 가져본다.
내가 만든 프로그램은 도서 관리 시스템으로, 콘솔에서 숫자를 입력받아 원하는 작업으로 이동해 처리하는 CLI 프로그램이다.
break)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;
}
}
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);
}
}
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("해당 책이 존재하지 않습니다.");
}
}
}
package Mini_Project;
public class BookList {
public void showAll() {
System.out.println("=== 도서 목록 ===");
for (Book b : BookRepository.getBooks()) {
System.out.println(b);
}
}
}
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;
}
}
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;
}
}
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("책 삭제 완료");
}
}
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로도 충분히 처리할 수 있었던 부분,
예외 처리 방식 등에서 많은 영감을 받았다.
막힌 문제를 하나씩 해결해 나가는 과정이 가장 재미있었고,
다음에 비슷한 프로젝트를 한다면 훨씬 더 잘할 수 있을 것 같다.