좋은코드 나쁜코드: 프로그래머의 코드 품질 개선법(PART II 실전)
CHAPTER 6 예측 가능한 코드를 작성하라
6.1 매직값을 반환하지 말아야 한다
매직값 magic value는 함수의 정상적인 반환 유형에 적합하지만 특별한 의미를 가지고 있다 매직값의 일반적인 예는 값이 ㅇ벗거나 오류가 발생 했음을 나타내기 위해
-1을 반환 하는것이다
- 매직값은 버그를 유발할 수 있다
- 널, 옵셔널 또는 오류를 반환 하라
- 때때로 매직값이 우연히 발생할 수 있다
- 매직값은 예측을 벗어나는 결과를 초래 할 수있기 때문에 발생 가능한 상황에 대해 조심해야 된다
6.2 널 객체 패턴을 적절히 사용하라
값을 얻을수 없을떄 널값이나 빈 옵셔널을 반환 하는 대신 널 객체 패턴을 사용할수 있다.
- 빈 컬렉션을 반환하면 코드가 개선될 수 있다.
- 빈 문자열을 반환하는 것도 때로는 문제가 될수 있다
- 문자들의 모음으로서의 문자열
- ID로서의 문자열
- 더 복잡한 널 객체는 예측을 벗어날 수 있다
- 널 객체 구현은 예상을 벗어 나는 동작을 유발할 수 있다.
6.3 예상치 못한 부수 효과를 피하라
일반적인 부수효과
사용자에게 출력 표시
파일이나 데이터베이스에 무언가를 저장
다른 시스템을 호출하여 네트워크 트래픽 발생
캐시 업데이트 혹은 무효화
분명하고 의도적인 부수효과는 괜찮다
예기치 않은 부수효과는 문제가 될수 있다
- 부수효과는 비용이 많이 들수 있다
- 호출한 쪽의 가정을 깨뜨리기
- 다중 스레드 코드의 버그
부수효과를 피하거나 그 사실을 분명히 해라
6.4 입력 매개변수를 수정하는 것에 주의하라
- 입력 매개변수를 수정하면 버그를 초래할 수 있다.
- 변경하기 전에 복사하라
6.5 오해를 일으키는 함수는 작성하지 말라
- 중요한 입력이 누락되었을때 아무것도 하지 않으면 놀랄수 있다
- 중요한 입력은 필수 항목으로 만들라
6.6 미래를 대비한 열거형 처리
- 미래에 추가될 수 있는 열것값을 암묵적으로 처리하는 것은 문제가 될수 있다.
- 모든 경우를 처리하는 스위치 문을 사용하라
- 기본 케이스를 주의하라
- 기본 케이스에서 예외 발생
- 기본 케이스를 주의하라
- 주의? 다른 프로젝트의 열거형의 의존
- 모든 경우를 처리하는 스위치 문을 사용하라
6.7 이 모든 것을 테스트로 해결할 수는 없는가?
- 어떤 개발자는 테스트에 부지런 하지 않을수 있다.
- 테스트가 항상 실제 상황을 정확하게 시뮬레이션 하는것은 아니다
- 어떤 것들은 테스트하기가 매우 어렵다