나중에 쓸 변수를 미리 선언하지 말자.
CASE - 불변하지 않은 전역변수 & 인스턴스 변수
- 모든 메서드를 읽을 때 기억해야 할 Context가 된다.
- 해당 변수가 충분히 설명적이지 않을 경우 어떻게 초기화되는지까지 같이 봐야 한다.
- 특정 메서드를 작성하다가 그 변수를 수정할 경우 모든 메서드에 그 변경이 전파될 수 있다.
- 가변변수라면, 해당 변수를 변경하는 모든 메서드를 같이 고려해야 한다.( 놓친 부분이 있다면 내 예상과 다르게 코드가 동작할 확률이 높다.)
Action Item
- 가능한 사용하는 곳과 가까운 변수를 생성한다.
- 가능한 변수(Context)의 Scope를 작게 제한하자.
메서드
메서드 크기가 커지는 것에서 Bad Smell을 맡아보자
메서드 크기가 커진다는 것은 하는 일이 많아지는 거다. (아닌 경우도 있겠지만.)
어느 책에서는 5줄을 기준으로 이야기를 하고 있지만, 사실 정답이 있는 문제는 아니다.
정리
비슷한 내용이더라도 거기에 대한 문맥과 자기만의 기준을 만들어 나갔으면 좋겠다. 그냥 말만 하는 것과 기준을 토대로 근거를 제시할 수 있는 것에는 설득력 자체가 다르다.
기준의 맞고 틀리고 보다 일관성 있는 코드가 더 중요하다. (다른 사람의 피드백을 받아들일 준비가 되어있고, 그 피드백을 통해 기준을 유연하게 맞춰나가면 될 문제라고 생각한다.
면접에 큰 도움이 된다! => 코드를 한줄한줄 설명할 수 있어야 된다.
- 위에서 아래로 설명하듯 읽히는 코드를 작성하자.
- 잘 읽히는 코드를 작성한다는 것은 글을 쓰는 것과 굉장히 닮아있다.
- 결국 읽는 사람을 생각해야 하고, 코드를 작성한 후에 잘 읽히는지 꼭 읽어보는 게 중요하다. (가능한… 기억을 지우고)
이러한 관점에서 중요하게 생각하는 맥락
- 위에서 아래로 읽어나갈 수 있는 코드를 작성하자.
- 설명하듯 읽히는 코드를 작성하자.
- 예상한 대로 흘러가는 코드를 작성하자.
설명하듯 읽히는 코드를 작성하자!
비슷한 추상화 수준으로 작성된 흐름. 그리고 적당히 잘 추상화된 메서드와 위임에 대한 이해가 필요하다.
추첨(배정) 하는 흐름을 한글로 적으면서 읽어보자.
다음과 같은 예를 들어보겠다.
- Raffle 준비 상태인지 확인
- Raffle Item에 대한 배정작업(assign)
- 잔여 Raffle item에 대한 추첨작업 (drawing)
- 배정된 item 결제금액
- 계산배정완료 TMS 발송
- Raffle 상태를 배정완료로 변경
- Raffle 정보, Item 배정정보를 이용한 Response 생성 및 반환
누군가 나한테 너 래플 아이템 배정할 때 어떻게 처리해라는 질문을 했다고 생각해 보자.
내가 말로 설명할 때의 흐름과 코드에서의 흐름이 동일해야 한다.
코드와 한글의 싱크로율이 높을수록 좋다.⇒ 우린 이 싱크로율을 높이기 위한 노력들을 할 거다.
public RaffleAssignmentResponse assignItem(long raffleId) {
Raffle raffle = raffleRespository.findById(raffleId)
.orElseThrow(() -> new RuntimeException("Not fount raffle info!"));
raffle.checkAssignReady();
raffleItemAssignmentBatchService.assign(raffle);
raffleItemAssignmentBatchService.drawing(raffle);
List<AssignmentInfo> result = raffleItemAssignmentBatchService.calcalatePaymentAmount(raffle);
raffleAlarmService.sentAssignmentCompleteTms(result);
raffleRepository.save(raffle.assigned());
return new RaffleAssignmentResponse(raffle, result);
}
'JAVA' 카테고리의 다른 글
큰수 만들기 (1) | 2024.10.02 |
---|---|
읽기 쉬운 코드 만들기 with 세션 (2 / 2) (3) | 2024.10.01 |
캡슐화에 대한 정리 with 세션 (0) | 2024.09.26 |
JVM 동작 방식 (0) | 2024.09.20 |
UncheckedException과 CheckedException (1) | 2024.09.13 |
ArrayList는 어떻게 크기가 조절될까? (0) | 2024.09.11 |
Garbage Collection(GC) 더 자세히 살펴보기 (0) | 2024.09.09 |
Java final과 불변성 (0) | 2024.09.08 |