내가 작성한 코드의 사용법을 다른 사람은 어떻게 아는가?
다른 사람이 코드를 파악하려면 다음과 같은 사항을 이해 해야한다.
그리고 다른사람이 코드를 파악하기 위해선 아래와 같은일을 한다.
위 내용중 아마 처음 세 가지만이 실제로 사용할 만하고 이름과 데이터 유형을 확인하는 것이 문서를 읽는 것보다 더 신뢰할 만하다. 네번째의 경우엔 코드를 작성한지 얼마 안됐을때는 효과적일 수 있으나 그렇지 않은 경우에는 신뢰하기 힘들다.
코드 계약
코드의 계약에 대한 용어를 다음과 같은 세가지 범주로 나누면 유용하다.
선결 조건(precondition) : 코드를 호출하기 전에 사실이어야 하는 것, 예를 들어 시스템이 어떤 상태에 있어야 하는지, 코드에 어떤 입력을 공급해야 하는지와 같은 사항
사후 조건(postcondition) : 코드가 호출된 후에 사실이어야 하는 것, 예를 들어 시스템이 새로운 상태에 놓인다든지 반환되는 값과 같은 사항
불변 사항(invariant) : 코드가 호출되기 전과 후에 시스템 상태를 비교해서 변경되지 않아야 하는 사항
개발자가 계약의 일부 혹은 모든 조건을 알지 못하면 코드 계약에 문제가 발생한다. 코드를 작성할때 만들어지는 계약의 내용이 무엇일지 그리고 어떻게 하면 코드를 사용하는 사람이 계약을 파악하고 따라갈 수 있을지에 대해 생각하는 것이 중요하다.
체크 및 어서션
체크는 시행중인 계약 조건에 따라 다음과 같은 범주로 구분된다.
전체 조건 검사 : 예를들어 입력수가 인구 올바르거나, 초기화가 수행되었거나, 일부 코드를 실행하기 전에 시스템이 유효한 상태인지 확인하는 경우
사후 조건 검사 : 예를들어 반환값이 올바르거나 일부 코드를 실행한 후 시스템이 유효한 상태인지 확인하느 경우
어서션은 체크와 거의 같은 방식으로 동작한다. 체크와 차이점은 배포를 위해 빌드할 때 어서션은 보통 컴파일에서 제외된다는 점이며,
컴파일에서 제외되는 이유는 다음과 같다.
성능 향상을 위해 : 조건이 위반되는지 확인하려면 CPU사이클이 필요하다. 코드에서 어서션이 많으면 소프트웨어의 전반적인 성능이 눈에 띄게 저하될 수 있다.
코드 오류 발생률을 낮추기 위해 : 이것이 유효한 동기인지 아닌지는 특정 응용 프로그램에 달려있다. 이로 인해 버그가 눈에 띄지 않을 가능성이 증가하지만 버그 발생 가능성 방지보다 고가용성이 더 중요한 시스템이라면 배포 시에 컴파일에서 제외하는 것은 적절한 절충이 될 수있다.
요약