{ 왜 일까? 컴파일 타임이 무척 길어 지기 때문이다. 물론 쿼드코어에 옥타코어 더나아가 256개의 코어를 가진 컴퓨터라면 별 상관 없겠지만, 우리같은 서민은 그런 돈 없다. 머리를 써서 시간이라도 벌어야 코딩 한 줄이라도 더 할 수 있고 사장님께 더 많은 돈을 벌어야 한다면, 위의 문구를 반드시 기억해야 한다고 나는 생각한다..(물론 코딩보단 생각을 ... ) 자! 개념을 정리하면 정의 의존성이란? 한 객체를 정의 하고자 할 땐, 그 객체의 크기를 알아야 한다. 그래야지만 C++ 컴파일러가 객체의 크기로 메모리를 얼마나 할당할지 컴파일 타임에 결정 하기 때문이다. 그래서 한 객체를 정의 하고자 할때, 다른 객체가 있다면 그 객체의 크기를 알 수 있는 헤더를 제공해 주어야 한다. 순환 의존성이란? A를 ..
컴파일 의존성 검색 결과
파트 1 ~ 2 까지 하면서 믿을 수 없게, 컴파일 의존성을 줄였다. 다음 코드는 파트 2 까지 정리된 코드이다. /* x.h : 원본 헤더, 컴파일 의존성 줄이기 위해 Pimple 적용된 모습 */ #include // 포워드 헤더 포함 #include "a.h" #include "b.h" class X : public A, private B { public: class C; // 포워드 선언 사용 X( const C& ); B f( int, char* ); C f( int, C ); C& g( B ); class E; // 포워드 선언 사용 E h( E ); virtual std::ostream& print( std::ostream& ) const; private: struct XImpl; XImpl..
파트 1에서 불 필요한 헤더를 제거하고 수정했다면, 파트2에선 기본 하는 일을 제외하고, 컴파일 의존성을 좀 주려 보자. 예제 코드 /* x.h : 원본 헤더 */ // #include 없어도 됨 // #include #include // 포워드 헤더 포함 #include #include "a.h" #include "b.h" #include "c.h" #include "d.h" // #include "e.h" class X : public A, private B { public: X( const C& ); B f( int, char* ); C f( int, C ); C& g( B ); class E; // 포워드 선언 사용 E h( E ); virtual std::ostream& print( std::o..
이 말이 무엇을 의미 하는가? 쉽게 말한다면 #include 관계를 뜻하고, 이 #include 관계를 줄이자는 뜻이다. 왜 파일 간 의존성을 줄어야 할까? 컴파일에 소모되는 시간을 줄여주기 때문이다. #include 관계가 많을수록 코드 수정 후 재컴파일에 들어가는 시간이 비례한다. 이게 프로젝트 중이라면, 정말 많은 시간을 컴파일하는데만 써야 할 것 이다. 어떻게하면 파일간의 의존성을 줄일수 있는가? "구현 세부사항이 필요한 경우와 필요 없는것 경우를 나누면 된다" 이것이 원리이다. 구현 세부 사항이 필요한 경우가 어떤 경우인가? 풀면 이해가 쉽다. 구현 하는데 그 세부사항이 필요하다는것을 뜻하는데, 그 예로 A라는 클래스가 B라는 클래스의 객체를 가질 때, 객체 구현시 그 세부사항이 필요한 경우이다..
최근댓글