Good Code, Bad Code (6) _ 예측 가능한 코드를 작성하라

열심히 해야하는데...
더 열심히 살아야 하는데....
공부도 하고 게임도 하고 운동도 하고 재태크도 하고 친구도 보고 돈도 벌어야해
24시간이 부족하단 말이지...
...이놈의 쇼츠만 없었어도... 다 했을탠데 ㅎ
매직값을 반환하지 말라 (-1 같이 잘못된 값을 받은 경우)
- 대신, 널이나 오류를 반환하는게 좋다
- 배열같은 컨테이너 형식은 널 대신 비어있는 값을 반환해라
- 문자열은 비어있는 상태에서 문제가 될 수 있으니, 널로 반환해라
예상치 못한 부수효과는 피해라
- 부수 효과 : 어떤 함수의 호출이 함수 외부에 초래한 상태 변화를 뜻한다.
- 예) 값을 변경하는 함수 내부에 과거 값을 기록 한다( 과거 값을 기록하는게 부수효과 )
class UserDisplay
{
void getPixel(int x, int y)
{
...
canvas.redraw(); //픽셀을 가져오면서 다시 그리도록 이벤트 호출 (부수효과)
...
}
}
redraw () 는 비용이 비싸서 디스플레이가 깜빡거리는 식의 문제가 생길수도 있다.
위 코드처럼 getPixel 을 호출하는 사람은 redraw를 인식하지 못하고 getPixel을 호출할 수 있기 때문에 예측할 수 없는 부수 효과는 하지 않는 것이 좋다.
또는, 메소드의 명명을 정확하게 해서 사용하는 사람이 정확하게 인지할 수 있도록 하는 것도 방법이다.
- getPixel -> redrawAndGetPixel
입력 매개변수가 수정되는 것을 주의하라.
void calculateSum(int a, int b, int& result) {
a = a + 10; // 실수로 입력 매개변수 a를 수정
result = a + b; // 의도치 않은 결과
}
이때 C++에서 &로 나오는 것을 출력 매개변수라 한다.
입력 매개변수의 값이 수정되는 것을 막기 위해서 const 를 붙여서 수정되지 않도록 막는 것이 좋다.
미래에 추가될 열거값을 암묵적으로 처리하는건 문제가 될 수 있다.
- 특정 enum의 값을 if 문을 통해 분기처리를 하고, 나머지는 처리하지 않게 될 경우, 나중에 추가되는 enum값에 대해서 반응하기 어렵다.
- 따라서, 특정 값을 분기처리 했다는 것을 잘 보여주는 Switch문을 활용하고 정의되지 못한 값들은 예외처리 하는 것이 좋다.