우아한테크코스 6기[BE] 2주차 회고

2023. 11. 3. 01:54JAVA

2주차 미션의 내용은 자동차 경주였습니다.

 

함수 분리와 테스트 작성

2주차에서는 함수를 분리하고, 각 함수별로 테스트를 작성하는 것 에 초점을 맞추는 게 핵심 주제였습니다. 따라서 1주차에서와 같이 TDD방법과 클린 코드에 유의하면서 기능을 구현했습니다. test 코드를 먼저 작성한 후에 기능을 작성하였고 계속해서 리팩토링을 하며 미션을 진행했습니다. TDD를 이용한 방식으로 2번째 미션까지 완료하니 TDD의 장점이 와닿기 시작했습니다. TDD 작성을 통해, 지금 구현하고자 하는 기능과 예외항목들을 명확히 정리할 수 있었고 구조를 먼저 생각하며 유지보수에 좋은 코드를 작성하는 데 집중할 수 있었습니다. 또한 junit5와 test들에 대해 공부하며 @ParameterizedTest, fixtures 등을 활용할 수 있었습니다. 클린 코드를 위한 방법으로 기능 별로 함수를 분리하고자 했습니다. 하지만 기능의 단위가 모호하다고 생각해, 의미 별로 메서드를 분리했습니다. 너무 잘게 쪼갤 경우 오히려 부정적인 요소가 될 수도 있다고 생각했습니다. 따라서 stream 혹은 2줄 이상의 코드가 하나의 의미를 가진다면 메서드 분리를 하고자 했습니다. 그 외에도 가독성을 위해 메서드 호출안에서 다른 메서드의 리턴을 받는 경우 분리해서 작성하는 등 규칙을 정해 작성하고자 했습니다.

 

 


 


2주차 미션에서는 1주차 코드리뷰에서 깨달은 내용들을 최대한 반영하고자 했습니다.

 

MVC 디자인 패턴


1주차 피드백을 통해 MVC 디자인 패턴에 대해 공부할 수 있었습니다. 따라서 controller, model, view 세가지로 구분하여 작성했으며 MVC의 규칙들을 지켜가며 코드를 작성했습니다. 따라서 Cars라는 model에서 outputView 의존성을 제거하기 위해, 턴을 controller에서 관리하며 턴이 끝날 때마다 controller에서 결과를 출력하도록 했습니다. 그 외에도 view는 model에만 의존하도록 코드를 작성했으며 model에서의 controller와 view 의존성 모두 제거했습니다.

 

 

일급 컬레션과 정적 팩토리 메서드


두번째로는 일급 컬렉션입니다. 1주차에서 코드리뷰를 하며 다른 지원자 분들의 Numbers 코드를 읽어볼 수 있었습니다. Numbers라는 객체를 통해 숫자 값과 메서드들을 관리하는 것이 인상적이었습니다. 따라서 자동차들과 메서드들을 Cars라는 일급 컬렉션으로 관리하며 가독성과 유지보수가 좋은 코드를 작성하고자 했습니다.

 

또한 자동차들의 이름을 받아서 Cars를 생성하는 과정을 정적 팩토리 메서드를 활용했습니다. 커뮤니티 활동을 통해 해당 개념을 알게 되었고 프로젝트를 리팩토링하며 도입할 수 있었습니다. 일급 컬렉션의 장점을 살리며 캡슐화, 생성자를 보호 등 여러 긍정적인 효과들을 얻을 수 있었습니다.

 

그 외에도 static 메서드를 적극적으로 활용하고자 했습니다. 많은 지원자분들이 static을 활용하는 것을 보고 static에 대해 자세히 공부할 수 있었습니다. 따라서 input이나 output과 관련한 메서드들은 단순히 값을 변환하고 반환하기에, 객체별 차이점이 없다고 판단해 static으로 작성했습니다.

 

 

구체적인 예외처리


마지막으로는 exception을 커스텀화 할 수 있었습니다. inputException과 inputErrorCode를 만들어 exception들을 구체화 했습니다. 단순히 예외처리하는 것이 아니라 해당 예외처리에 대한 구체적인 설명도 적었으며, 이것들을 errorcode라는 enum으로 관리하며 가독성과 유지보수도 높일 수 있었습니다.

 

'JAVA' 카테고리의 다른 글