CHAPTER 6 예측 가능한 코드를 작성하라

좋은코드 나쁜코드: 프로그래머의 코드 품질 개선법(PART II 실전)

CHAPTER 6 예측 가능한 코드를 작성하라

6.1 매직값을 반환하지 말아야 한다

매직값 magic value는 함수의 정상적인 반환 유형에 적합하지만 특별한 의미를 가지고 있다 매직값의 일반적인 예는 값이 ㅇ벗거나 오류가 발생 했음을 나타내기 위해
-1을 반환 하는것이다

  • 매직값은 버그를 유발할 수 있다
    • 널, 옵셔널 또는 오류를 반환 하라
  • 때때로 매직값이 우연히 발생할 수 있다
    • 매직값은 예측을 벗어나는 결과를 초래 할 수있기 때문에 발생 가능한 상황에 대해 조심해야 된다

6.2 널 객체 패턴을 적절히 사용하라

값을 얻을수 없을떄 널값이나 빈 옵셔널을 반환 하는 대신 널 객체 패턴을 사용할수 있다.

  • 빈 컬렉션을 반환하면 코드가 개선될 수 있다.
  • 빈 문자열을 반환하는 것도 때로는 문제가 될수 있다
    • 문자들의 모음으로서의 문자열
    • ID로서의 문자열
  • 더 복잡한 널 객체는 예측을 벗어날 수 있다
  • 널 객체 구현은 예상을 벗어 나는 동작을 유발할 수 있다.

6.3 예상치 못한 부수 효과를 피하라

일반적인 부수효과

  • 사용자에게 출력 표시

  • 파일이나 데이터베이스에 무언가를 저장

  • 다른 시스템을 호출하여 네트워크 트래픽 발생

  • 캐시 업데이트 혹은 무효화

  • 분명하고 의도적인 부수효과는 괜찮다

  • 예기치 않은 부수효과는 문제가 될수 있다

    • 부수효과는 비용이 많이 들수 있다
    • 호출한 쪽의 가정을 깨뜨리기
    • 다중 스레드 코드의 버그
  • 부수효과를 피하거나 그 사실을 분명히 해라

6.4 입력 매개변수를 수정하는 것에 주의하라

  • 입력 매개변수를 수정하면 버그를 초래할 수 있다.
    • 변경하기 전에 복사하라

6.5 오해를 일으키는 함수는 작성하지 말라

  • 중요한 입력이 누락되었을때 아무것도 하지 않으면 놀랄수 있다
    • 중요한 입력은 필수 항목으로 만들라

6.6 미래를 대비한 열거형 처리

  • 미래에 추가될 수 있는 열것값을 암묵적으로 처리하는 것은 문제가 될수 있다.
    • 모든 경우를 처리하는 스위치 문을 사용하라
      • 기본 케이스를 주의하라
        • 기본 케이스에서 예외 발생
    • 주의? 다른 프로젝트의 열거형의 의존

6.7 이 모든 것을 테스트로 해결할 수는 없는가?

  • 어떤 개발자는 테스트에 부지런 하지 않을수 있다.
  • 테스트가 항상 실제 상황을 정확하게 시뮬레이션 하는것은 아니다
  • 어떤 것들은 테스트하기가 매우 어렵다

참조