• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

DirectX12 초기화 - 장치초기화 질문 있습니다.

21.06.13 23:40 작성 조회수 176

0

25:06에서 Engine.cpp에

CommandQueue.h와 Swapchain.h, DescriptorHeap.h를 include하는것을 볼 수 있는데요.

왜 각 헤더파일들을 Engine.h에서 include 안하는건가요?

여기 뿐만 아니라 강사님은 헤더파일 안에서 다른 헤더파일을 include 하는것을 지양하시는것 같은데 왜 그런가요?

답변 1

답변을 작성해보세요.

0

C++에서 헤더 파일에서 다른 헤더 파일을 #include 하는 것은 가급적 피해야 하고
최대한 전방 선언을 사용해야 합니다.
상속 등을 사용해서 정말 해당 파일의 기능이 당장 필요할 때,
혹은 #include하는 대상이 아주 작을 경우라면 괜찮지만
그 기능이 필요하다고  #include를 헤더에서 신나게 추가하기 시작하면
나중에 구조가 수습이 안 되는 말이 발생합니다.

우선 #include에 순환이 생기는 문제가 있습니다.
A.h B.h가 있는데, A.h에서는 B.h를 #include하고,
B.h에서 A.h를 #include하면 그냥 컴파일이 되지 않습니다.
(내가 존재하려면 타인이 존재해야 하고, 그 타인이 존재하려면 내가 존재해야 한다 @_@???)

두번째로 .h에서 다른 .h를 #include하면 헤더 사이의 종속성이 생깁니다.
A.h가 B.h를 #Include하는 상황에서, B.h의 내용이 수정되면,
A.h를 #include하는 모~든 애들도 다시 컴파일 되어야 합니다.
작은 프로젝트라면 상관없을 수도 있지만
나중에 게임이 커지면 컴파일이 몇 분씩 걸릴 수도 있습니다.