방어 코딩을 위해 좋아하는 (영리한) 기술 을 선택해야한다면 그 기술은 무엇입니까? 현재 사용하는 언어는 Java 및 Objective-C (C ++의 배경 지식)이지만 모든 언어로 자유롭게 대답 할 수 있습니다. 여기서 우리 중 70 % 이상이 이미 알고있는 것 이외의 영리한 방어 기술 에 중점 을 둘 것입니다. 이제 트릭을 깊이 파고들 차례입니다.
다시 말해이 흥미없는 예 이외의 다른 것을 생각해보십시오 .
if(5 == x)
대신if(x == 5)
: 의도하지 않은 할당을 피하기 위해
다음은 흥미로운 방어 적 프로그래밍 방법에 대한 몇 가지 예입니다 (언어 별 예는 Java로되어 있음).
-변수를 변경해야 할 때까지 변수를 잠그십시오.
즉, 변수 를 변경해야한다는 것을 알 때까지 모든 변수를 선언 할 수 있으며이 final
시점에서을 제거 할 수 있습니다 final
. 일반적으로 알려지지 않은 사실은 이것이 메소드 매개 변수에도 유효하다는 것입니다.
public void foo(final int arg) { /* Stuff Here */ }
-나쁜 일이 생길 때는 증거를 남기십시오
예외가있을 때 수행 할 수있는 여러 가지 작업이 있습니다. 명백하게 기록하고 정리를 수행하는 것은 몇 가지 일 것입니다. 그러나 증거의 흔적을 남길 수도 있습니다 (예 : "UNABLE TO LOAD FILE"또는 99999와 같은 센티넬 값으로 변수를 설정하면 예외 catch
블록을 넘어서 버릴 경우 디버거에서 유용 할 수 있습니다 ).
-일관성에 관해서 : 악마는 세부 사항에 있습니다.
사용중인 다른 라이브러리와 일관성을 유지하십시오. 예를 들어 Java에서 값 범위를 추출하는 메소드를 작성하는 경우 하한을 포함 하고 상한을 독점으로 설정하십시오 . 이것은 String.substring(start, end)
같은 방식으로 작동하는 것과 같은 방법과 일치하게합니다 . Sun JDK에서 이러한 유형의 모든 메소드는 배열이 일치하는 요소의 반복을 포함하여 다양한 작업을 수행하므로 인덱스가 0 ( 포함 )부터 배열의 길이 ( 독점 ) 까지 다양한 방식으로 작동하므로 이러한 방식으로 작동합니다 .
그렇다면 가장 좋아하는 수비 관행은 무엇입니까?
업데이트 : 아직하지 않은 경우 자유롭게 차임하십시오. 공식 답변을 선택하기 전에 더 많은 답변을 드리겠습니다.