군만두의 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