[많은 시간을 투자한 부분]

 

1) 클래스(객체) 분리

첫 단추가 잘 꿰어져야 그 이후가 순조롭게 진행된다고 생각하여 객체를 설계하는 데 시간을 많이 투자했습니다. 2주 차 미션까지는 단순히 기능을 먼저 정리하고 기능에 따라서 클래스를 분리했습니다. 이러한 과정에서 무언가 체계적이지 않고 확실한 기준 없이 내 마음대로 객체를 설계한다는 생각이 들었습니다. 따라서 3주 차 미션에서는 객체 설계 방법에 대해 학습했으며 그 중 도메인 모델을 사용해 설계하였습니다. 그림으로 직접 도메인 모델을 설계한 결과, 구현하기 위해 필요한 객체들과 그 책임이 명확해지고, 협력 또한 한 눈에 파악할 수 있었습니다.

 

도메인 모델

역시 과제를 하면서도 모호했던 것이 데이터를 꺼내서 사용하는 getter 였습니다. 꼭 필요했다고 생각했었지만 

 

2) 예외 처리

기본으로 제공된 ApplicationTest의 예외_테스트() 부분에서 어려움을 겪었습니다. 예외_테스트() 에서는 assertThatThrownBy() 으로 예외를 체크하는 것이 아니라 assertThat(output()).contains(ERROR_MESSAGE) 로 출력 메시지만 체크를 했기 때문에 단순히 throw new IllegalArgumentException 으로 구현하면 테스트에 실패했습니다. 제공된 기능 요구 사항에는 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 종료한다.” 라고 되어 있었기 때문에 예외 처리를 하지 않고 메시지만 출력할 수도 없었습니다. 여러 가지 방법을 고민했고, 예외가 발생하는 부분을 throw하고, 구현된 기능들을 사용하여 전체 로직을 구성하는 매니저에서 catch하여 전체 로직을 멈추고 예외와 메시지를 출력, 종료하도록 구현했습니다.

 

3) 도메인 로직과 UI 분리

도메인 로직과 UI를 분리하기 위해 가장 널리 알려진 MVC 패턴에 대해 학습했습니다. 학습하는 과정에서 모델, , 컨트롤러로 분리한다는 것은 알겠는데, 내 코드를 실제로 어떻게 분리할 수 있을지에 대해 고민을 했습니다. 처음에 설계한 도메인 모델에 객체들을 사용하는 매니저 단을 추가하여 해결할 수 있었습니다. 매니저에서 전체 로직을 수행하며 필요한 UI 클래스와 도메인 클래스를 사용하는 방식으로 프로그램을 완성해 도메인 로직과 UI를 분리할 수 있었습니다.

 

[느낀 점]

추가된 요구 사항 중에서 함수의 길이를 15라인으로 제한하는 점이 좋았습니다. 길이가 긴 함수는 두 가지 이상의 기능을 할 가능성이 높기 때문에 분리되지 않은 기능을 더 세분화하여 분리할 수 있었습니다.

if-else 문을 사용하지 않음으로써 가독성이 매우 향상된 것을 느꼈습니다.

2주 차 미션에서는 도메인 로직과 UI 로직을 분리하지 않아서 테스트를 진행할 때 중복이 존재하는 등 애매한 부분이 있었습니다. 3주 차 미션을 진행하면서 도메인 로직과 UI을 분리하고 테스트를 진행해 보니 명확한 테스트를 진행할 수 있었습니다.

 

[배운 점]

[Enum]

enum은 다른 언어에서도 사용해본 적이 있지만 단순히 가독성만 늘려주는 정도였습니다. 하지만 JAVA에서의 enum은 훨씬 더 강력했습니다. 특히 enum클래스에 메서드를 구현할 수 있는 점이 인상 깊었습니다. 직접 예제를 만들어 보며 enum에 대해 학습하고 블로그에 글을 작성했는데, 그 과정이 매우 재미있었습니다.

 

작성한 블로그 : https://matouslescotousles.tistory.com/6

 

[SOLID]

클래스를 분리하기 위해 객체 설계에 대해 학습하던 중 SOLID에 대해 알게 되었습니다. Single Responsibility Principle 는 우테코 프리코스 1주 차 부터 강조했던 부분이여서 매우 반가웠습니다. 특히 Open/Closed Principle 원칙의 인터페이스에 의존하는 코드의 장점을 자주 사용하는 Collection 클래스를 통해 느꼈습니다.

 

작성한 블로그 : https://matouslescotousles.tistory.com/7

 

[immutable vs mutable]

테스트를 작성하던 중 에러가 생겨서 디버깅을 진행했습니다. ListretainAll() 연산을 수행하는 부분이 있었는데, 테스트 코드에서는 ListList.of()를 통해 immutablelist로 초기화하고 있었습니다. 따라서 retainAll() 연산을 진행할 새로운 mutable list를 생성하여 리턴하도록 구현했습니다. mutable listimmutable list가 나뉘어져 있다는 것을 처음 알았으며, 안정성을 위해 가능한 immutable을 사용해야 한다는 생각을 했습니다.

 

[도메인 로직과 UI 분리의 중요성]

도메인 로직과 UI를 분리하는 방법에 대해 학습하던 중 한 동영상에서 설명한 내용이 있었습니다. 우리가 지금 작성하는 프로그램의 입출력은 콘솔이지만 입출력을 윈도우, , 모바일로 변경했을 때를 생각해 보라는 내용 이었습니다. 도메인 로직과 UI 코드를 섞어서 구현할 경우 이를 전부 새로 구현해야 된다는 생각에 도메인 로직과 UI 분리의 중요성에 대해 깨달았습니다.

 

시청한 영상 : https://www.youtube.com/watch?v=efMRwQwxmJM

 

'회고 > 우테코 프리코스' 카테고리의 다른 글

4주 차 회고  (0) 2022.12.01
2주 차 회고  (0) 2022.11.10
1주 차 회고  (0) 2022.11.03

+ Recent posts