728x90
반응형
빌드 시에 해야 할 일을 런타임까지 미루지 말라.
컴파일러가 컴파일을 진행하면서 잘못된 부분을 찾을 수 있게 하는 것이 런타임에 검사하도록 하는 것보다 좋은 방법이다. 런타임 검사는 컨트롤과 데이터에 의존적이기 때문에, 완벽하게 대비하기 힘들다. 반대로 컴파일 시의 검사는 컨트롤과 데이터에 의존하지 않기 때문에 비교적 완벽한 신뢰를 줄 수 있다.
C++ 언어는 오류 검사를 컴파일 타임에 진행되도록 하여 보다 가속화할 수 있는 다양한 기회를 제공한다.
- 정적인 검사는 데이터와 프로그램 흐름에 독립적이다.
정적인 검사는 프로그램의 입력과 흐름에 관계가 없으므로, 그만큼 검사가 수월하다. 반대로 런타임 검사의 경우는 적절한 신뢰를 위해 다양한 입력 샘플과 환경에서 테스트해 볼 필요가 있다. - 정적으로 표현된 모델이 더 강력하다.
런타임 검사보다 컴파일 타임 검사에 더 의존하는 프로그램일수록 보다 나은 디자인을 반영하는 경우가 많다. 런타임 검사도 때로는 정적인 방식으로 이루어지기도 하지만, 언어 내에서 정확하게 표현되기는 힘들다. - 정적 검사는 런타임 오버헤드를 발생시키지 않는다.
동적인 검사를 정적인 검사로 대체하면 정확성을 해치지 않고서도 보다 빠른 실행 속도를 얻을 수 있다.
C++의 가장 강력한 정적 검사 도구 중 하나는 타입 검사이다. 타입이 정적으로 검사 되어야 한다는 쪽 (C++, 자바, ML, Haskell)과 동적으로 검사되어야 한다는 쪽(Smalltalk, Ruby, Python, Lisp)의 논쟁은 아직 끝난 것이 아니며 딱히 어느 쪽에 손을 들어야 할지 애매 상태이지만, 특정한 언어와 개발 스타일에 따라 특정한 검사 스타일이 더 나은 성능을 보인다는 것은 여러 결과를 통해 증명되고 있다. 강력한 정적 검사 기능을 제공하는 반명 자동화된 런타임 검사 기능이 약한 것이 C++의 특징이라는 점이다. 따라서 프로그래머는 C++의 장점을 살리기 위한 타입 시스템을 사용해야 하며, 런타임 검사는 데이터와 프로그램의 실행 프름과 밀접한 관련이 있는 부분에 사용하는 것이 좋다.
728x90
반응형
'소프트웨어 공부 > 프로그래밍' 카테고리의 다른 글
마법의 숫자는 쓰지 말라 (0) | 2021.04.20 |
---|---|
const를 사용하라. (0) | 2021.04.20 |
안전한 공유를 위한 코딩의 시기와 방식을 결정하라. (0) | 2021.04.20 |
정보를 숨겨라. (0) | 2021.04.20 |
적절한 규모 유지를 위해서는 '언제, 어떻게' 를 아는 것이 중요하다. (0) | 2021.04.20 |