이번주차 미션에서는 MVC패턴과 객체지향을 적용시키는 것을 최우선 목표로 잡고 진행하였다. 두가지를 이렇게 신경쓰면서 개발을 진행한것은 처음이었기 때문에 많은 어려움이 있었다.
어려웠던점
1. 객체 역할 분리
객체들의 역할을 지정하고 역할에 맞게 기능을 지정해주는 것이 어려웠다. 특히 사용자 입력검증에 대해서 하나의 객체에서 처리하고 싶었으나, 구조상 하나의 객체에서 처리되기 힘든경우들이 있었다. 초기 구조를 설계하는 과정에서 문제가 있었다고 생각한다. 특히 이번 과제는 에러를 발생시키고 종료하는것이 아닌 에러발생 지점부터 다시 값을 입력받아야하는 기능이 필요했기에 더욱 구현하기 어려웠다.
초기 설계가 부족하다 보니 구현을 해가며 그때그때 추가된 클래스들이 많이 있었고, 그렇다보니 객체간 역할의 분리가 제대로 이루어지지 않았다.
2. 메소드 기능 단순화
2주차 공통 피드백에서 메소드가 하나의 기능만을 수행하도록 최대한 단순히 작성하는것을 피드백해주었는데, 이때 15줄 이상을 넘지 않도록 하는것을 기준으로 잡았다. 이를 처음엔 의식하지 않고 코딩을 하다가 후에 확인을 해보니, 15줄이 넘는 메소드들이 매우 많았고, 하나의 메소드가 하는일이 다수 있는것을 확인했다. 그리고 확인했다 하더라도 이를 분리하는것도 생각보다 어려운 작업이었다.
3. enum사용하기
2주차 미션을 진행할 때, 값을 하드코딩한 경우들이 굉장히 많았는데, 2주차 공통피드백에서 하드코딩하지 말라는 얘기를 보자마자 아! 싶었다. 그래서 이번 주차 미션에선 java의 enum을 사용해보려 했는데, 상수값으로 필요한것이 무엇인지 바로바로 파악하기가 힘들었고, 변수명을 이해하기 쉬운 이름으로 짓는것도 생각보다 어려웠다.
4. MVC패턴적용
객체역할분리에서 겪은 어려움과 비슷한 어려움이다. model, view, controller의 역할을 처음 적용시켜가며 코딩을 해보았는데, 각 객체들이 어디까지 역할을 담당해야할지 정하는 것이 어려웠다. input view가 있다고 하면 input view는 사용자 입력값을 받는 역할만 해야하는가, 아니면 받은 값을 파싱하고 validation하는 일까지 해야하는가 정하는것이 애매했다.
배운점
1. 객체지향과 MVC 왜 써야할까?
객체지향은 하나의 큰 프로그램을 작은 객체들로 나누어 각 객체들이 작은일들을 나누어 하는 것이다.
그리고 MVC는 객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 디자인 패턴으로, 개발을 하며 생길 수 있는 반복적인 문제들을 패턴을 통해 설계를 함으로써 미리 예방을 할 수 있게된다.
객체지향과 MVC를 사용하면 코드의 재사용, 가독성이 좋고, 유지보수가 쉬워지는 효과를 얻을 수 있게 된다.
실제로 이번 미션을 진행하며, 대부분 하나의 객체에서 모든것을 처리했던 저번 미션과는 달리 코드에 대한 가독성이 높아지는 것을 느낄 수 있었다.
2. 상수값은 하드코딩하지말고 enum을 적극적으로 활용하자
이번 미션에서 상수값으로 들어가는 값들을 enum으로 정의하여 진행하였는데, 정의한 상수값들이 생각보다 더 많이 쓰이게 되서 놀랐다. 확실히 유지보수에 쉬워보였고, 코드를 보았을 때 이 값이 어떤 것을 뜻하는지도 바로 파악이 되어 enum을 사용하는 것이 이리보나 저리보나 훨씬 좋아보였다.
3. 메소드는 최대한 단순하게
공통 피드백에서 각 메소드의 기능을 최대한 단순하게 하라고 하여 적용시켜보았다. 확실히 각 메소드가 어떤일을 하는지 이름으로 쉽게 바로 파악이 가능했고, 코드도 깔끔하게 정리되었다. 다만 처음 코드를 보는 입장에선 계속 왔다갔다 해야해서 조금 불편할 수도 있겠다는 생각은 들었다.
'우테코 7기 > 프리코스' 카테고리의 다른 글
[3주차] 코드리뷰 (0) | 2024.10.30 |
---|---|
[2주차] 자동차 경주 회고 (0) | 2024.10.28 |
[1주차] 문자열 덧셈 계산기 회고 (0) | 2024.10.20 |
[1주차] TDD(Test-Driven Development)란 (1) | 2024.10.16 |
[1주차] Coding Convention이란 (0) | 2024.10.16 |