출근길 강의
준비시간
아침 공부시간
프로젝트 진행
어제 구현한 부분 검토
어제 했던 부분을 어떻게 개선할까 고민하면서 보다가 동료가 업데이트 해놓은 부분있다고 해서 update를 했는데 내용이 많이 변경되서 기존의 내가 업데이트한부분들이 날아가버렸당
테스트하는 방법 찾아서 작성한 코드 테스트해보기
오후 프로젝트 발표
발표전 잠깐 준비하는 시간이 있었는데 이미 동료가 내부분까지 하고 있던상황이라 내가 더할영역은 없었고 같이봐주는걸로 마무리했다
발표또한 동료가 주도해서 진행했고 아쉬워서 한마디 덧붙이기는 했지만 별 얘기는 못하고 마무리되었다
다른 조 발표들으며 느낀점
발표시간 좋은 기회인데 준비 잘 안된 조들에 대해서는
PPT형태로 준비해서 목록을 만들고 순서대로 진행하니 어떻게 진행하는지 이해하기 좋았다
주제선정이유, 개발 시간 투자비율 등 프로젝트 진행에 대해 전반적인 정보를 제공하는 것도 좋았다
시연할 때는 모든 기능을 다구현한것을 보이는것보다 핵심기능을 보여주면서 너무 지루하지 않게 구성하는게 좋을 것 같다
아직 구현하지 못한 기능이라도 앞으로 이렇게 구현해나갈것이라고 이야기하는 것도 상상해볼수있고 좋았던것 같다
저녁 공부시간
DB퀴즈
두시간 조금 안되서 quiz2를 모두 풀었다
기본적으로는 GROUP BY와 COUNT, SUM 등의 예약어를 사용한는 것이고 1번문제는 못풀어서 검색해보니 DISTINCT라는 예약어로 중복값을 모두제거하고 COUNT하면 풀수있는 문제였다
이번 퀴즈를 통해 수업에서 배운 예약어들을 연습하고 CONCAT, DISTINT같은 예약어를 검색을 통해 배울 수 있었다
프로젝트 정리
진행한 프로젝트의 과정들을 돌아보면서 배운점들을 정리해 보는 시간을 가졌다
주제선정 및 구상
애플리케이션 구현
발표
코드 리뷰
cui패키지
이렇게 역할이 분리되 몰라도 될것들을 최대한 모르게 구현하는것이 중요한 설계원칙이라고 한다..
InputHandler는 메뉴에서 받는 모든 input을 관리하는 친구로 Scanner가 아닌 bufferedReader를 통해 입력을 받아 입력속드를 빠르게 하였다
- 이렇게 input은 따로 input의 기능들을 통합하여 구현하는게 좋다고 한다
- 그리고 UIString이라는 constant를 모아놓은 클래스를 통해 상황에 맞게 출력될 메세지를 정리해두어 input과 함께 사용되게 하여 직관성을 높이고 분산되서 처리되던 메세지들을 한곳에 모아 처리할 수 있게 하였다
- Menu들의 인터페이스로 메뉴들을 정의하고 또 다형성을 통해 사용될 수 있게 하는 역할을 한다
- 어떤 메소드들을 추상화해야되는지 고민이 만힝 되었는데 최종적으로는 모든 메뉴에 들어가는 call()과 default 메서드인 backToMainMenu만 남게 되었다
- MainMenu
- MainMenu는 MenuType에 있는 메뉴들을 통해 구현된 MainMenu에 목록을 띄워주고 입력을 받아 해당 입력을 MenuController에 전달하는 역할을 한다
- 메뉴들을 Enum을 통해 관리하는 방식은 처음에 Menu를 모두 클래스로 만들었더니 클래스를 줄이면 좋겠다는 피드백을 받고 생각해 낸 방식인데 그게 아니었다면 구지 Enum을 만들지 않거나 내부 Enum을 활용하는 방식으로 했었을 수 도 있을것 같다
- InputTransactionMenu
- 수입과 지출을 service를 사용해 저장하는 역할을 하는 클래스로 사용자로부터 입력을 어떻게 받을 것인가에 관해 많이 고민을 한 클래스이다
- 가장 많은 메서드들이 들어있는 클래스이고 그만큼 최적화를 위해서 많이 노력한 클래스이다
- 특히 inputStatementMenu메서드는 특히 많은 조건문을 가진 클래스의 핵심 메서드였는데 여러번의 Extract Method와 리팩토링을 거쳐서 그래도 처음보다 많이 나아진 모습을 보여준다
- 강사님께서 조건문을 예외처리와 본기능 같이 기능별로 구분하는게 좋다고해서 그것을 기준으로삼아 정리한게 많이 도움이 되었다
- 또 피드백 중 기억나는 것은 입력받는 메소드에서 재귀함수를 사용하면 프로그램이 꼬일 수 있으니 사용하지 말라는 피드백을 듣고 재귀를 사용하지 않고 조건문을 사용하거나 아니면 그냥 다른곳으로 빠져나가게 처리했다
- 마지막 피드백에서도 의미가 불분명한 메서드가 있다고 피드백을 받아서 속상하기도 했지만 그만큼 복잡하고 어려운 구현이 클래스였고 단순히 구현 해서 작동하는게 문제가 아니라 어떻게 구현해야 안전하고 깔끔하게 잘읽히는 코드를 짤수 있는가 라는 고민을 가장 많이 하게 해준 클래스이다
- 많은 input을 받는 클래스라 vaildation이 중요하여 uitil 패키지에 validator라는 클래스를 따로만들어 모든 입력에 대한 검증메소드를 작성하였다
- 처음으로 정규표현식을 사용해보았는데 사용하면서도 사실 잘이해가 가지는 않았고 보충이 필요할 것 같다
- 하지만 정규식을 통해 효과적으로 입력을 검증하고 그외에 예외적인 것만 조건문을 통해서 하면 정말 좋은 검증메소드를 만들 수 있다는 것을 배웠다
- 나는 list를 통해 입력 메뉴를 띄었지만 동료가 리팩토링 해준 것은 StringBuilder를 통해 하나의 String 형태로 만들어 메뉴를 띄운 모습을 보고 이렇게하면 테스트도 편할것 같아서 기억해두면 좋을것 같다고 생각했다
- addCategory, InitialzationMenu, Exit
- 모두 각각의 기능들을 구현하는 클래스로 좀더 구현에 대해서 고민을 더해봤으면 하는 아쉬움이 많이 남는 클래스들이다
- 전형적으로 한쪽에만 집중하다가 다른쪽에 소흘하게 된 케이스인것 같아서 한번에 묶어서 리뷰를 해봤다
- 정리
- 수준이 많이 높은 동료와의 프로젝트는 소통과 구현의 난이도가 높아서 나에게는 큰 도전들이 있어서 어렵고 지치는 순간들도 있었지만 그런 어려움들을 솔직하게 동료에게 표현하고 또 따라가기 위해 노력하는 과정에서 도움도 많이 받고 많이 성장한 것 같아서 좋게 평가하고 싶다
- 물론 아쉬운 점도 많지만 이렇게 정리를 하면서 그런 아쉬운점들을 새로운 목표로하여 다른 프로젝트를 준비하는 시작으로 삼을 수 있어서 이 기분이 좋다 => 굿!