본문 바로가기
C++

[C++ 20] 모듈 (Module) 사용하기

by 코드쉼터 2024. 4. 15.

C++ 20 의 모듈 시스템이란 헤더 파일을 따로 만들지 않고도 cpp 파일들만 가지고 클래스들의 메타데이터 정보를 생성해 h 파일 없이도 링킹 가능하도록 만든 것입니다.

기존에는 대형 프로젝트의 경우 헤더 파일에서 한글자만 바꾸더라도 매크로 레벨의 헤더 파일 복붙 방식 O(n*n) 이라서 하위 cpp 파일까지 전부 컴파일을 다시 했어야 했는데, 이 기능 덕분에 컴파일 속도도 매우 빨라집니다.

현대적인 언어 JAVA, C# 등은 전부 이런 방식을 이미 쓰고 있는데 C 가 워낙 오래된 언어라서 그렇습니다..

 

모듈 시스템은 2017년 표준에 들어온 기능임에도, 아직 TR (Test & Review) state 로 있어서 일부 컴파일러에서 기능을 활성화야 사용할 수 있습니다.

 

이 글에서는 Visual Studio 2022 에서 사용하는 방법을 알려드립니다.

(인텔리센스는 현재 버전에서 지원하지 않습니다)

 

1. 일반적인 빈 C++ 프로젝트를 만들어줍니다.

 

 

2. 프로젝트 설정을 다음과 같이 합니다.

 

 

 

3. 모듈 (기존에는 .h, .cpp 파일이 따로 있는 클래스에 해당) 파일을 Math.ixx 로 만들어줍니다.

 

 

Math.ixx 파일

#pragma once
export module Math; // 외부로 Math 라이브러리를 링킹 해주세요 라는 의미입니다.

export int Add(int a, int b)
{
	return a + b;
}

export int Sub(int a, int b)
{
	return a - b;
}

export int Mul(int a, int b)
{
	return a * b;
}

export int Div(int a, int b)
{
	return a / b;
}
 

 

 

4. main 이 들어있는 cpp 파일을 작성합니다.

 

Main.cpp 파일

#pragma once
import <iostream>; // 표준 라이브러리들도 <> 괄호로 감싸서 include 가능합니다.
import Math; // Math 라이브러리를 include 하는 것과 같습니다.

int main()
{
	std::cout << "test " << Add(1, 2) << std::endl;
	return 0;
}
 

 

 

4.1 C++23 부터는 표준 라이브러리들을 모듈 방식으로 사용할 수 있습니다. (내용 추가)

다만 프로젝트 설정을 아래와 같이 해야 합니다.

 

 

5. 컴파일 하면 끝

C++20 스타일

빨간 밑줄은 인텔리센스가 아직 모듈을 지원하지 않아서 그렇습니다. 무시하셔도 좋습니다.

 

 

C++23 스타일