부트캠프/TIL

[부트캠프] TIL - 리팩토링

purple95 2024. 8. 6. 21:11

코드카타 진행 이후 오늘은 프로젝트의 리팩토링 과정에 시간을 쏟았습니다.

 

현재 Main함수의 기능을 하는 CampManagementApplication.java 파일에 기능이 몰려있는 상황입니다.

 

따라서 튜터님의 조언은 현재의 구현방식은 절차지향적인 프로그래밍 방식에 가깝고 객체지향적인 프로그래밍으로 

진행해보는 경험을 하라 였습니다.

 

조언을 듣고 저는 기존에 MVC 패턴에 대해 학습한 경험이 있었기 때문에 바로 MVC 패턴과 DAO 그리고 

VO, DTO, POJO, BEAN 의 개념이 떠올랐습니다.

 

기존 파일구조

 

애초에 프로젝트의 초안을 만들어 주셨을 때 MVC 패턴을 염두에 둔 것이 아닐까 생각이 들었습니다.

 

바로 파일 명의 model 과 CampManagementApplication.java 파일의 ~~~View() 함수들

 

View()의 이름을 한 메소드들과 사용자 화면을 의미하는 sout 메시지

 

그렇다면 남은것은 Controller입니다, 팀이 해야 할 일은 View의 역할을 하는 CampManagementApplication.java

파일의 코드에서 Controller를 분리해내는 것입니다.

 

여기에 객체지향적인 방법으로 해보고자 리팩토링의 1단계로 시도한게 DAO 입니다. 

분리한 파일 구조입니다.

MVC 패턴으로 리팩토링한 파일구조

 

간략한 설명을 드립니다, DAO는 Data Access Object 라고 하며

원래는 JDBC 와 같은 API를 사용하여 DB와 연결을 하고 view에서 전달받은 정보를 가지고 DB와 통신하며 

데이터를 처리하는 역할을 담당하는 클래스입니다,

하지만 저희의 이번 프로젝트에서는 DB의 사용이 없기 때문에 각 Model의 DAO를 두고

각각의 DAO가 데이터를 담을 Collection 객체를 보유하며 그것에 대한 CRUD 및 데이터 처리를 해주는 메소드를 

보유하는것입니다, 이렇게하면 View함수에서는 각각의 DAO 인스턴스들을 생성해주고

입력받은 정보를 토대로 그에 맞는 데이터 처리를 진행해주는것입니다.

Interface를 둔 이유는 프로젝트 조건에 주어진 구현사항들에 공통점이 있었기 때문입니다.

대략적으로 CRUD와 유사한 기능들이 공통되는 부분이 있었고

이부분에 대하여  간략한 Inteface를 구현하여 추후 다뤄야 할 데이터 모델이 추가되거나 변경될 경우 

더욱 유지보수가 쉬워질 수 있도록 하였습니다.

공통된 동작들을 담은 interface

 

하지만 오늘 리팩토링 과정에서 문제가 발생했습니다.

 

사전에 충분한 모델 설정 및 논의를 거치지 않고 바로 분업 및 코드 작성 그리고

구현사항 달성을 위주로 구현에 집중한 코드를 작성하여

 

공통된 기능은 수행하지만, 그것의 구현 방식이 제각각이라 Interface에 맞춰

다형성을 구현하게 리팩토링하는 과정이 너무나 복잡해진상태였습니다, 그렇기때문에 오늘 하루의 대부분의

시간을 소모해버렸고, 현재 리팩토링의 1차 마무리 단계로

StudentDAO의 리팩토링과 ScoreDAO의 약 30퍼센트 정도의 리팩토링을 하고

 

실행 테스트로 StudentDAO의 정상동작 확인과 ScoreDAO의 동작에러 상황으로 마무리를 지었습니다.