신뇽이 되어보자

[Refact] Enum 확장 본문

프로젝트

[Refact] Enum 확장

신뇽이되고싶은미뇽 2024. 10. 30. 16:52
728x90

옵션 별로 강의를 검색하는 기능을 구현할 때 

 

선택한 키워드에 맞게 검색하는 방식이 달라지며 호출하는 메서드들이 각각 달라진다는 특징이 있다.

 

기존코드에서는 enum클래스에 선택 옵션들의 키워드를 선언한 후 서비스에서 구분을 했었다.

 

그러다가 Enum 클래스가 단순히 상수 값을 넘어서 상수 메소드로서의 이용 또한 가능함을 알게되었다.

 

상태와 행위를 한 곳에서 관리를 할 수 있어

객체지향적으로 코드를 패턴화 하여 유지보수가하기 용이하다는 장점이 있음을 알게 되었고

코드 개선을 해보고자 하였다.

public enum SearchOption {

    DEPARTMENT{
        @Override
        public List<Lecture> search(LectureRepository lectureRepository, SearchLectureRequestDTO searchLectureRequestDTO){

            return lectureRepository.findByDepartmentNameAndGradeAndLectureName(
                    searchLectureRequestDTO.getQuery(),
                    searchLectureRequestDTO.getGrade(),
                    searchLectureRequestDTO.getLectureName()
            );
        }
    },
    KEYWORD {
        @Override
        public List<Lecture> search(LectureRepository lectureRepository, SearchLectureRequestDTO searchDTO) {
            return lectureRepository.findByLectureNameContaining(searchDTO.getQuery());
        }
    },
    LECTURE_CODE {
        @Override
        public List<Lecture> search(LectureRepository lectureRepository, SearchLectureRequestDTO searchDTO) {
            return lectureRepository.findByLectureCodeAndDivision(
                    searchDTO.getQuery(),
                    searchDTO.getDivision()
            );
        }
    };

    public abstract List<Lecture> search(LectureRepository lectureRepository, SearchLectureRequestDTO searchDTO);
}

 

위의 코드처럼 enum 클래스에 메서드를 정의하였다.

 

추상메소드를 만들고 구체화시키는 방식으로 구현을 했다.

 

 

728x90