Code ‐ 논리, 사고의 흐름 - thought-corner/Backend-PlayGround GitHub Wiki

📚 Early Return

  • Early return으로 else의 사용을 지양한다.
if (doesUserChooseToOpenCell(userActionInput)) {
  if (isLandMineCell(selectedRowIndex, selectedColIndex)) {
    BOARD[selectedRowIndex][selectedColIndex] = LAND_MINE_SIGN;
    changeGameStatusToLose();
    return;  // Early Return 적용
  }
  open(selectedRowIndex, selectedColIndex);
  checkIfGameIsOver();
  return;
}

📚 사고의 depth를 줄여보자.

  • 사용할 변수는 가깝게 선언하기
  • 중첩 반복문 / 중첩 분기문
for (int i=0; i<20; i++) {
  for (int j=20; j<30; j++) {
    if (i >= 10 && j < 25) {
      doSomething();
    }
  }
}

📚 공백 라인을 대하는 자세

  • 공백 라인도 의미를 가진다. -> 복잡한 로직의 의미 단위를 나누어 보여줌으로써 읽는 사람에게 추가적인 정보를 전달할 수 있다.

❗공백이 없는 것이 꼭 깔끔한 코드를 말하는 것이 아니다. 공백으로 의미를 명확히 전달할 수 있다는 부분도 새롭게 알게 되었다.

📚 부정어를 대하는 자세

// Bad
if (!isLeftDirection()) {  // 왼쪽 방향이 아니면?
  doSomething();
}
// Good 1
if (isNotLeftDirection()) { // 부정어를 명확하게
  doSomething();
}

// Good 2
if (isRightDirection()) {
  doSomething();
}

📚 해피 케이스와 예외 처리

  • 예외가 발생할 가능성을 낮추기
  • 어떤 값의 검증이 필요한 부분은 주로 외부 세계와의 접점 -> 사용자 입력, 객체 생성자, 외부 서버 요청 등
  • 의도한 예외와 예상치 못한 예외를 구분 -> 사용자에게 보여줄 예외와 개발자가 보고 처리해야 할 예외를 구분

❗내가 질문하고픈 부분을 명확하게 전달하는 능력이 부족하다고 생각한다. "모르겠어요"라는 질문보다는 어디까지 생각을 했고 그 이후의 과정에서의 피드백을 요청하는 것이 가장 좋다.

[ Null을 대하는 자세 ]

  • NullPointerException을 방지하는 방향으로 경각심을 가지기
  • 메서드 설계 시 return null을 자제한다. -> 만약 어렵다면 Optional을 고민해본다.

[ Optional에 관해 ]

  • Optional은 비싼 객체다. 꼭 필요한 상황에서 반환 타입에 사용한다.
  • Optional을 파라미터로 받지 않는다.
  • Optional을 반환받았다면 최대한 빠르게 해소한다.