기존 빌드

  • c++빌드 과정
  • 헤더 파일의 내용이 복사되어 파일에 들어감 <- "Transition Unit" 방식

모듈 빌드(import)

참고 : devshovelinglife_모듈

  • 한번 도입되며 비용이 거의 없음
    • 재사용 가능하기에 컴파일 시간 단축
    • 여러 소스 파일에서 재사용 가능하기에 코드 중복 감소
  • 모듈 인터페이스와 구현 파일이 분리되어 빌드 의존성 관리 용이
    • 모듈 인터페이스를 통해 외부 노출 부분과 내부 숨김 부분이 나누어져 캡슐화 강화
  • 모듈 간의 의존성을 명확하게 정의 가능하여, 헤더 파일방식 보다 효율적

모듈 선언

참고 : kukuta_모듈

  • vs 기준 확장자가 .ixx인 파일 <- 모듈 인터페이스 단위
      // ModuleA.ixx 모듈 인터페이스 파일
      export module ModuleA;      // 내보낼 모듈의 이름 지정
      namespace Foo
      {
          ​​​​export int MyIntFunc()  // 모듈에서 내보낼 기능(함수)의 인터페이스를 지정
          ​​​​{
              ​​​​​​​​return 0;
          ​​​​}
          ​​​​void InternalMyFunc()   // 모듈 내부에서만 사용하는 전역 함수
          ​​​​{
          ​​​​}
          export int gobalInt;   // 모듈에서 내보내는 전역 변수
          export class moduleClass{};  // 모듈에서 내보내는 클래스
      }

하위 모듈

  • 모듈의 크기가 커지면, 하위 모듈로 분할하는 것을 권장

  • 하위 모듈은 개별 파일로 구성

      // mainmodule.ixx
      export module mainmodule;
    
      export import :submodule1;
      export import :submodule2;
    
      export namespace mainnamespace {
          void mainFunction() {
              // 상위 모듈의 함수 구현
          }
      }
      //==================
      // submodule1.ixx
      module mainmodule:submodule1;
      export namespace mainnamespace::subnamespace1 {
          void subFunction1() {
              // 하위 모듈 1의 함수 구현
          }
      }
      //===================
      // submodule2.ixx
      module mainmodule:submodule2;
    
      export namespace mainnamespace::subnamespace2 {
          void subFunction2() {
              // 하위 모듈 2의 함수 구현
          }
      }
      //===================
      import mainmodule;
      int main() {
          mainnamespace::mainFunction();
          mainnamespace::subnamespace1::subFunction1();
          mainnamespace::subnamespace2::subFunction2();
          return 0;
      }

번외

  • gcc의 경우는, msvc와 확장자명, 전처리문의 위치 문제 등이 있을 수 있음.

'공부 > C++' 카테고리의 다른 글

C++ 변수  (0) 2025.03.03
C++ 여러가지 기본  (0) 2025.03.02
C++ 빌드 과정  (0) 2025.03.02
디버그 출력  (0) 2025.03.02
C++ 저장&링킹  (1) 2025.03.01

+ Recent posts

let textNodes = document.querySelectorAll("div.tt_article_useless_p_margin.contents_style > *:not(figure):not(pre)"); textNodes.forEach(function(a) { a.innerHTML = a.innerHTML.replace(/`(.*?)`/g, '$1'); });