소프트웨어 공부/프로그래밍

런타임 오류보다는 컴파일이나 링크 타임 오류가 낫다.

야곰야곰+책벌레 2021. 4. 20. 13:17
728x90
반응형

빌드 시에 해야 할 일을 런타임까지 미루지 말라.

컴파일러가 컴파일을 진행하면서 잘못된 부분을 찾을 수 있게 하는 것이 런타임에 검사하도록 하는 것보다 좋은 방법이다. 런타임 검사는 컨트롤과 데이터에 의존적이기 때문에, 완벽하게 대비하기 힘들다. 반대로 컴파일 시의 검사는 컨트롤과 데이터에 의존하지 않기 때문에 비교적 완벽한 신뢰를 줄 수 있다.

 

C++ 언어는 오류 검사를 컴파일 타임에 진행되도록 하여 보다 가속화할 수 있는 다양한 기회를 제공한다.

 

  • 정적인 검사는 데이터와 프로그램 흐름에 독립적이다.
    정적인 검사는 프로그램의 입력과 흐름에 관계가 없으므로, 그만큼 검사가 수월하다. 반대로 런타임 검사의 경우는 적절한 신뢰를 위해 다양한 입력 샘플과 환경에서 테스트해 볼 필요가 있다.
  • 정적으로 표현된 모델이 더 강력하다.
    런타임 검사보다 컴파일 타임 검사에 더 의존하는 프로그램일수록 보다 나은 디자인을 반영하는 경우가 많다. 런타임 검사도 때로는 정적인 방식으로 이루어지기도 하지만, 언어 내에서 정확하게 표현되기는 힘들다.
  • 정적 검사는 런타임 오버헤드를 발생시키지 않는다.
    동적인 검사를 정적인 검사로 대체하면 정확성을 해치지 않고서도 보다 빠른 실행 속도를 얻을 수 있다.

  C++의 가장 강력한 정적 검사 도구 중 하나는 타입 검사이다. 타입이 정적으로 검사 되어야 한다는 쪽 (C++, 자바, ML, Haskell)과 동적으로 검사되어야 한다는 쪽(Smalltalk, Ruby, Python, Lisp)의 논쟁은 아직 끝난 것이 아니며 딱히 어느 쪽에 손을 들어야 할지 애매 상태이지만, 특정한 언어와 개발 스타일에 따라 특정한 검사 스타일이 더 나은 성능을 보인다는 것은 여러 결과를 통해 증명되고 있다. 강력한 정적 검사 기능을 제공하는 반명 자동화된 런타임 검사 기능이 약한 것이 C++의 특징이라는 점이다. 따라서 프로그래머는 C++의 장점을 살리기 위한 타입 시스템을 사용해야 하며, 런타임 검사는 데이터와 프로그램의 실행 프름과 밀접한 관련이 있는 부분에 사용하는 것이 좋다.

728x90
반응형