군만두의 IT 공부 일지

[Java] 패스트캠퍼스 백엔드 개발 부트캠프 8기 토이 프로젝트 1 DAY4 본문

개발일지/패스트캠퍼스

[Java] 패스트캠퍼스 백엔드 개발 부트캠프 8기 토이 프로젝트 1 DAY4

mandus 2024. 4. 4. 20:51

목차

📅진행기간: 2024년 4월 1일 ~ 2024년 4월 5일

 

CRUD 기능 구현

 

⭐요약


  • 3일차에는 예외 처리 로직을 구현하고, 리팩토링 및 발표회 준비에 대해 생각함.
  • 4일차에는 TripJsonManager의 여행 json 파일 수정, 삭제 기능을 구현하고 싱글톤 패턴을 적용함.

⭐CRUD 기능


여행 데이터의 CRUD (Create, Read, Update, Delete) 기능을 구현하기로 함. json 파일의 생성과 읽기 기능은 구현했기 때문에, 수정과 삭제 기능을 어떻게 구현했는지 정리함. 구현해야 할 기능은 다음과 같음.

 

  • 여행 정보 수정: 기존의 여행 정보를 수정함.
  • 여행 정보 삭제: 선택한 여행 정보를 삭제함.


1. 여행 정보 수정(Update)

특정 ID를 가진 여행 정보를 찾아 사용자가 원하는 대로 데이터를 수정할 수 있음.

public boolean updateTrip(Trip updatedTrip) throws FileIOException {
    List<Trip> trips = readTripTable();
    boolean updateFlag = false;

    for (int i = 0; i < trips.size(); i++) {
        if (trips.get(i).getTripId() == updatedTrip.getTripId()) {
            trips.set(i, updatedTrip);
            updateFlag = true;
            break;
        }
    }

    if (!updateFlag) {
        throw new FileIOException("수정할 여행 ID가 존재하지 않습니다.");
    }

    boolean rewriteTableSuccess = rewriteTripTable(trips);
    if (!rewriteTableSuccess) {
        return false;
    }

    return updateTripIdFile(updatedTrip);
}

▲ 여행 정보 수정 결과

2. 여행 정보 삭제(Delete)

사용자가 지정한 ID의 여행 정보를 찾아 JSON 파일에서 삭제함.

public boolean deleteTrip(int tripId) throws FileIOException {
    List<Trip> trips = readTripTable();
    trips.removeIf(trip -> trip.getTripId() == tripId);

    if (trips.size() == originalSize) {
        throw new FileIOException("삭제할 여행 ID가 존재하지 않습니다.");
    }

    boolean rewriteSuccess = rewriteTripTable(trips);
    if (!rewriteSuccess) {
        return false;
    }

    return deleteTripIdFile(tripId);
}

▲ 여행 정보 삭제 결과

 

이 기능을 추가하면, 사용자는 여행 정보를 효율적으로 관리할 수 있음. 여행 정보 수정과 삭제 기능에서도 날짜 관련 데이터 처리에서의 예외 상황 처리, 파일 입출력 시 발생하는 예외 처리를 구현함.

⭐싱글톤 패턴 적용


TripJsonManager 클래스를 통해 json 파일을 관리하는데, 이 클래스는 싱글톤 패턴을 이용하여 인스턴스가 한 번만 생성되도록 구현됨.

    private static TripJsonManager instance;

    private TripJsonManager() {}

    private static class SingletonHelper {
        private static final TripJsonManager INSTANCE = new TripJsonManager();
    }

    public static TripJsonManager getInstance() {
        return SingletonHelper.INSTANCE;
    }

 

현재까지 디렉토리 구조는 다음과 같음. 남은 시간 동안 리팩토링 및 발표 준비를 마무리할 예정임.

📦src
 ┣ 📂exception
 ┃ ┣ 📜DuplicateDateException.java
 ┃ ┣ 📜DuplicateTripNameException.java
 ┃ ┣ 📜FileIOException.java
 ┃ ┣ 📜InputEmptyException.java
 ┃ ┣ 📜InputEndException.java
 ┃ ┗ 📜InvalidDateOrderException.java
 ┣ 📂imp
 ┃ ┣ 📜Controller.java
 ┃ ┣ 📜ItineraryJsonManager.java
 ┃ ┗ 📜TripJsonManager.java
 ┣ 📂Itinerary
 ┃ ┣ 📜Itinerary.java
 ┃ ┗ 📜ItineraryController.java
 ┣ 📂resources
 ┃ ┣ 📜1.json
 ┃ ┗ 📜TripTable.json
 ┣ 📂Trip
 ┃ ┣ 📜Trip.java
 ┃ ┗ 📜TripController.java
 ┣ 📂util
 ┃ ┣ 📜Message.java
 ┃ ┗ 📜Util.java
 ┣ 📂view
 ┃ ┣ 📜ItineraryView.java
 ┃ ┣ 📜MainView.java
 ┃ ┣ 📜TripView.java
 ┃ ┗ 📜View.java
 ┣ 📜Main.java
 ┣ 📜MainController.java
 ┗ 📜TripApplication.java

⭐후기


  • 이제 거의 마무리 단계임. 필요한 내용은 다 구현했지만, MVC  패턴 적용이나 코드 리팩토링에 있어서는 부족한 부분이 많다고 생각함.
  • 발표자료를 다 준비하지 못했기 때문에 내일 발표회 전까지 마무리지어야 함. 이러한 토이 프로젝트 과제가 주어졌을 때, 다른 팀과의 차별성을 두려면 어떻게 해야 할지 정하는 것이 어려운 것 같음.

 

이 글은 패스트캠퍼스백엔드 개발 캠프에서 공부한 내용을 작성한 것입니다.
Comments