1. 이번주 공통 피드백에서 인상 깊었던 것에 생각 붙이기
인상 깊었던 부분 위주로만 짧게 정리하고 내 생각(🐱)을 덧붙이겠다.
- 비즈니스 로직과 UI 로직 분리 (단일 책임 원칙)
- 현재 객체의 상태를 보기 위한 로그 메시지 성격이 강하다면 toString() 사용
- View에서 사용할 데이터라면 getter 메서드 통해 데이터 전달
- 🐱 나는 getter를 쓰기 싫어서 dto를 쓰고서 이를 outputFormatter에서 포맷팅 해줬었는데, toString(로그 메시지 성격 강할 시)을 쓰는 것도 방법이 될 수 있단걸 배웠다.
- 연관성 있는 상수는 static final 대신 enum 활용
- 🐱 상수로 표현 가능한 것들에 대해 enum을 쓸지 상수를 쓸지 고민한적이 있었는데, LottoRule 같은 enum을 활용했음 좋았을 거 같다.
- 객체는 객체 스럽게 사용 → 데이터 꺼내지 말고 메시지 던지도록 구조 바꿔 데이터를 가지는 객체가 일하도록 하기
- 🐱 getter를 무조건적으로 지양해야 하는 건 아니지만, 이런 경우엔 지양해야 한단 디렉팅이 명확해서 좋았다. tda 원칙을 이야기 하는 거 같다. 나도 저번 주차에 이런 이상한 객체가 있었는데, 리팩토링하면서 tda 원칙을 따르니 디렉팅처럼 객체를 객체스럽게 사용할 수 있었다.
- 인스턴스 변수 수를 줄이기
- 🐱 필드 수가 많은 건 그 인스턴스가 여러 책임을 떠맡은건 아닐지 의심해볼 만 하다 생각해왔다. 책임 관점에서 가 아닌 버그 발생 가능성, 객체 복잡도 측면에서 불필요한 필드를 없애 필드 수를 최소화하란 관점이 인상깊었다.
- 성공이랑 예외 둘다 테스트하기. 특히 경계값 부분
- 🐱 테스트코드를 작성하면서부터 생성 테스트는 꼭 해야할까란 고민이 들었었는데 이 역시 쌓여서 단위 테스트의 일부로 동작할것이기에 성공 테스트로서 생성테스트도 해야 한다 판단했다.
- 테스트코드도 리팩터링 하기. 특히 중복 코드 제거
- 🐱 테스트코드,, 무지성으로 짜다보면 중복 코드가 왕창 나오기 쉽다. 주의하자.
- 테스트를 위한 편의 메서드는 구현 코드에 구현하지 않기
- 🐱 테스트를 위한 메서드를 stub 같은 형태로 테스트패키지쪽으로 빼는 것도 방법이 될 거 같고, functional interface로 만들어 람다식으로 활용해보는 것도 좋은 거 같다.
- 단위 테스트가 어려운 코드 리팩토링 → 테스트 하기 어려운 것을 클래스 내부가 아닌 외부로 분리
- 🐱 테스트 하기 어려운 것과 쉬운 것의 관계를 그림처럼 표현해서 좋았다. 더 나아가, 테스트 하기 어려운 부분은 단위 테스트하지 않아도 된단 건 랜덤값은 테스트하지말라는 힌트도 된다 생각했다. 한 단계 윗 객체로 보낸다해도 여전히 그 윗 객체는 테스트가 어려울텐데, 이런 경우 인터페이스와 구현체를 활용하면 좋을 거 같다.
- 테스트 쉽게 구현하기 위해 가독성 이상의 일을 하는 private 함수를 테스트하고 싶다면 이는 객체 분리의 신호
- 🐱 private 함수의 역할을 가독성 그 이상인지 이하인지 측면에서 바라보는 게 인상깊었다. 어쩌면 당연한 이야기인데 이는 테스트코드를 안짜고선 느끼기 힘들다. 테스트코드가 주는 이점이란 생각이 들었다.
2. 이번주 코수타를 보고 든 생각 정리하기
- 디자인 패턴에 대해
- 2주차에 썼다가 뒤늦게 yagni 원칙에 위반한단 걸 알게 됐었다. 따라서 3주차엔 최대한 yagni 원칙을 위반하지 않게 생각하려 하다보니 자연스레 사용하지 않게 됐었다.
- 코수타에서도 해당 과제에선 디자인 패턴에 대해 권장하지 않는단 걸 보고 잘 따라가고 있었구나 라고 생각했다.
- mvc1과 mvc2
- mvc1을 1주차부터 써왔다.
- mvc 패턴을 썼을 때 다가온 장점은 controller가 모델과 뷰 사이에서 코드를 간결하게 정리해준 단 점이 컸다.
- 그러다 지난 주차에 controller가 너무 비대해져 service 레이어가 추가된 mvc2를 적용해볼까 고민한 적이 있었다.
- 하지만, 이는 도메인끼리 역할 분담이 제대로 되지 않아 발생한 일이었다 판단해 mvc2 도입은 적절치 않다 결정했다.
- 이번 4주차에선 도메인끼리 적절히 메시지를 주고받게해 controller가 비대해지는 문제를 해결해보겠다.
Today in 프리코스
TIL 작성하기
몰입
코수타 듣고 느낀 점 적기
공통 피드백 보고 느낀 점 적기
1일차_둘러보기, 환경설정하기
Oct 19, 2023
DIARY_DEVELOP
2일차_컨벤션 정리하기
Oct 20, 2023
DIARY_DEVELOP
3일차_설계에 대해 고민하기
Oct 21, 2023
DIARY_DEVELOP
4,5일차_MVC 온전히 이해하기
Oct 22, 2023
DIARY_DEVELOP
6일차_설계를 코드로 구현하기
Oct 24, 2023
DIARY_DEVELOP
7일차_리팩토링과 마무리하기
Oct 25, 2023
DIARY_DEVELOP
8,9일차_코드 리뷰 통해 객체지향에 다가가기
Oct 27, 2023
DIARY_DEVELOP
10일차_지난 과제 돌아보며 객체지향 이해하기, 의존성과 설계의 관계 맛보기
Oct 28, 2023
DIARY_DEVELOP
11일차_객체지향을 미션 설계에 적용하기(with [책] 객체 지향의 사실과 오해)
Oct 29, 2023
DIARY_DEVELOP
12일차_기능 별로 구현하며 단위 테스트의 필요성 느끼기 (with [책]
자바와 JUnit을 활용한 실용주의 단위 테스트)Oct 30, 2023
DIARY_DEVELOP
13,14일차_일급 컬렉션과 레코드 적용해 리팩토링하기
Oct 31, 2023
DIARY_DEVELOP
15, 16일차_코드 리뷰를 통해 성장하기(1)_다른 사람의 코드 읽으면 배운 것 정리
Nov 2, 2023
DIARY_DEVELOP
17일차_코드 리뷰를 통해 성장하기(2)_내 코드 개선하며 배운 것 정리
Nov 4, 2023
DIARY_DEVELOP
18일차_내가 찾은 설계 방법 공유하기, 공유에 대해 고민하기
Nov 5, 2023
DIARY_DEVELOP
19일차_지난 과제 피드백 고려해 설계하기
Nov 6, 2023
DIARY_DEVELOP
20, 21일차_일단 돌아가는 코드를 만들기
Nov 7, 2023
DIARY_DEVELOP
22일차_현재 도움이 될 것 생각하기 (디자인패턴과 mvc2 과감히 패스)
Nov 9, 2023
DIARY_DEVELOP
23일차_코드리뷰하기 (feat. converter 파고들기)
Nov 10, 2023
DIARY_DEVELOP
24일차_기획을 문서화하기
Nov 11, 2023
DIARY_DEVELOP
25일차_설계하며 고민하기
Nov 12, 2023
DIARY_DEVELOP
26, 27일차_구현하며 고민하기
Nov 13, 2023
DIARY_DEVELOP

