런타임 오류와 컴파일 타임오류 등 정리한 곳 : http://pcclear.tistory.com/59

컴파일 타임에 에러가 나는 것은 전부 "문법" 에서 나게 된다. 이 문법은 런타임에 일어날 수 있는 많은 오류들을 잡아 준다. 예를 들어, explicit 키워드가 써진 생성자를 가진 객체를 매개변수로 하는 함수가 있을 경우, 해당 객체로 암시적 형변환 자체를 다 막아 줌으로써, 런타임에 생길 수 있는 오류를 잡아 줄 수 있다.

이것은 컴파일 타임에 런타임에 있을 수 있는 많은 오류들을 잡아 주기에 큰 역활을 한다.(개인적으로 이렇게 생각함)

다른 측면에서 보면, 런타임에 계산할 필요가 없는 상수들을 컴파일 타임에 계산하여, 사용 할 수도 있다. 이는 템플릿과 밀접한 관계를 가지고 있고, 메타 프로그래밍을 통해 보다 복잡한 계산을 컴파일 타임에 시도 할 수 있다. 결국 컴파일 타임에 미리 계산하면 런타임의 오버헤드는 없어지게 되는 큰 장점을 지닌다.

GPG 책에서의 상수 테이블이나, Boost::MPL 등이 이런 측면 일 것이다.


총평

경험적으로 대부분의 런타임 오류들은 문법쪽보다는 논리쪽에서 많이 일어 나곤 한다. 상충되는 개념이 같이 있는 클래스, 다형성의 잘못된 사용, 캐스팅 변환, 등등 이 있다. 이 것들은 컴파일 타임(컴파일러)이 고쳐주는 것이 아니기 때문에 이것들 까지 잡을 수 는 없다.

여기서 중요한 것은 저런 논리구조가 잘 짜여있을 때, 컴파일러가 뱉어내는 "오류" 들 이다. 그렇기 때문에 이번 항목은 "제대로 설계한 로직에서 나타나는 컴파일 에러"가 "런타임 에러" 보다 낫다고 할 수 있겠다.

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요