[ C++ 20 ] Module

Minsu._.Lighting·2024년 2월 15일
0

📔 [ Modern C++ / C# ]

목록 보기
2/8

💡 Module?

  • C++20의 모든 기능 중 가장 중요한 기능이라고 할 수 있다.
    - 지금 당장 많이 쓰인다기보다는 서버 프로그래밍에서는 빠르게 적용되어가고 있기 때문에 몇년 후 많이 쓰일 것

💡 Module을 사용하는 이유?

📌 C++의 빌드속도가 오래걸리는 단점을 보완하기 위해서!

  • C++은 다른 언어에 비해 실행속도가 빠르지만 그 만큼 빌드속도가 오래걸리는 단점이 있음
    - 불필요하게 반복되는 빌드
[ Test1.h ]
#include <iostream>

[ Test2.h ]
#include <iostream>

[ Test3.h ]
#include <iostream>

// 위와 같이 iostream을 반복해 참조하면 컴파일 단계에서 .obj 파일의 용량이 증가한다.

📌 매크로( #define ) 사용을 줄이기 위해!

[ Test1.h ]
#define NUM 1

[ Test2.h ]
#define NUM 2

[ main.cpp ]
const int iNum = NUM;

// 위와 같이 매크로 NUM을 사용하면 사용자 입장에서 1인지, 2인지 헷갈리게 된다.
// 해당 경우 참조 순서에따라 NUM이 바뀐다.

📌 심볼 중복 정의를 줄이기 위해!

[ Test1.h ]
void TestFunc()
{
	...
}

[ main.cpp ]
#include "Test1.h"

// 여러번 정의된 기호 링크 에러 발생!

- Test1.hobj파일로 만들고, main.cppobj파일로 만들게 되는데 이때 TestFunc()가중복되기 때문

📌 Module 사용시 위 문제들 해결 가능!

  • Module은 딱 한번 import 된다!

  • import 순서에 상관 없다!

  • import 순서에 상관 없다!

  • Module 이름 지정 가능!

  • 인터페이스 / 구현부 분리 관리 필요성 사라짐!



💡 Module 사용 예시!

📌 Module 생성 방법

  • 프로젝트 - 모듈 추가 클릭

  • C++ 모듈 인터페이스 단위(.ixx) 클릭

  • 생성 후 기본 세팅

📌 1. 함수 앞에 export 키워드 사용

  • 가장 기본적인 사용 예시
  • 기능 선언 / 정의 후 export
  • import후 사용

📌 2. export 영역 지정 사용

  • export할 함수들을 {}로 묶어주어 관리
  • import후 사용

📌 3. export namespace 지정 사용

  • 가장 권장하는 방법
  • export할 함수들을 namespace로 묶어주어 관리
  • namespace:: 후 사용

📢 Module 내부에서만 사용할 함수라면?

  • export 키워드를 미사용


💡 Module에서 사용할 외부 라이브러리 등을 사용할 때?

📌 sub module 문법

  • 주로 쓰일 문법

  • sub module만 독립적으로 사용 가능

  • 일종의 약속

    - module 파일의 위쪽에 위 처럼 작성해준다.

  • Math.Time 처럼 Math의 하위 개념의 기능들을 또 다른 module로 엮어 관리할 수 있다.
    - 시간과 관련된 기능들을 묶어놓은 Time module 은 module 이름을 Math.Time으로 지정해 마치 접근 연산자를 사용한 것과 같은 효과를 주어 사용 한다.

  • Math.Timeimport
    - Math.Time을 해당 module 에서만 사용 하겠다

  • Math.Timeexport import
    - Math.Time을 해당 module 에서도 사용 하고 Math만 import 해도 사용 가능


📌 partition 문법

  • module 본체
  • partition module
  • import후 사용
  • sub module과 다르게 각 partition들은 독립적으로 사용 불가능!
profile
오코완~😤😤

0개의 댓글

관련 채용 정보