컴파일 시간을 줄이기 위한 그 첫번째 단계는 "불필요한 헤더 파일을 제거해야 한다" 부터 시작 된다. 왜냐하면 많은 헤더파일 포함은 그에 비례한 시간을 컴파일러에게 주어야 하기 때문이다.
그렇다면, 어떤 헤더 파일을 제거해도 되는지 아래 코드를 보자.
자. 어디를 빼도 되고, 바꾸면 되는지 주석을 달아 보자.
#include <iostream>
이 코드는 입출력 스트림에 관한 헤더 파일이다. 하지만 이 코드에선 출력 스트림만 사용 하므로 ostream만 있어도 상관 없다.
#include <ostream> 을 #include <iosfwd> 로
위의 소스 코드에서 ostream을 쓰지 않고 ostream& 을 사용 하기 때문에, 전방 선언만 있어도 될 것이다. 그것을 헤더 파일로 라이브러리 제작자가 제공하고 있고 그것이 iosfwd 헤더이다. 영어로 "iostream + Forward" 로 축약 시킨듯 보인다. ^^
가이드 라인 : 스트림 포워드 선언(전방 선언)이 필요 할 경우, iosfwd 헤더를 include 하자
왜냐하면 E 객체는 현재 매개변수와 반환형으로만 쓰여지기 때문에, 포워드 선언만으로도 해결 가능하다. 여기에 대한 자세한 이야기는 Effective C++ 3판을 보도록.
아래 코드는 전부 다 작업한 코드이다.
그렇다면, 어떤 헤더 파일을 제거해도 되는지 아래 코드를 보자.
자. 어디를 빼도 되고, 바꾸면 되는지 주석을 달아 보자.
분석
①
iostream 제거#include <iostream>
이 코드는 입출력 스트림에 관한 헤더 파일이다. 하지만 이 코드에선 출력 스트림만 사용 하므로 ostream만 있어도 상관 없다.
②
ostream을 iosfwd로 대체#include <ostream> 을 #include <iosfwd> 로
위의 소스 코드에서 ostream을 쓰지 않고 ostream& 을 사용 하기 때문에, 전방 선언만 있어도 될 것이다. 그것을 헤더 파일로 라이브러리 제작자가 제공하고 있고 그것이 iosfwd 헤더이다. 영어로 "iostream + Forward" 로 축약 시킨듯 보인다. ^^
가이드 라인 : 스트림 포워드 선언(전방 선언)이 필요 할 경우, iosfwd 헤더를 include 하자
③
e.h를 포워드 선언(전방 선언)으로 대체왜냐하면 E 객체는 현재 매개변수와 반환형으로만 쓰여지기 때문에, 포워드 선언만으로도 해결 가능하다. 여기에 대한 자세한 이야기는 Effective C++ 3판을 보도록.
아래 코드는 전부 다 작업한 코드이다.
총평
좀 더 표준 헤더에 대한 기초를 공부할 필요가 있겠다. 포워드 헤더를 찾아보면 몇개 더 있을 듯 하기도 하다.'책 정리 > Exceptional C++' 카테고리의 다른 글
항목 20 : 클래스 동작 원리 (난이도 7) (0) | 2008.10.18 |
---|---|
항목 30 : "Fast Pimpl" 이디엄 (난이도 4) (0) | 2008.10.17 |
항목 29 : 컴파일 방화벽 (난이도 6) (0) | 2008.10.16 |
항목 28 : 컴파일 시간 의존성 줄이기 - 파트 3 (난이도 7) (0) | 2008.10.16 |
항목 27 : 컴파일 시간 의존성 줄이기 - 파트 2 (난이도 6) (0) | 2008.10.16 |
항목 34 : 이름 검색과 인터페이스 - 파트 4 (난이도 9) (0) | 2008.10.16 |
항목 33 : 이름 검색과 인터페이스 - 파트 3 (난이도 5) (0) | 2008.10.16 |
항목 32 : 이름 검색과 인터페이스 - 파트 2 (난이도 9) (0) | 2008.10.15 |
항목 31 : 이름 검색과 인터페이스 - 파트 1 (난이도 : 9½) (0) | 2008.10.15 |
항목 25 : 개체지향 프로그래밍 (난이도 4) (2) | 2008.10.14 |
최근댓글