[ Test1.h ]
#include <iostream>
[ Test2.h ]
#include <iostream>
[ Test3.h ]
#include <iostream>
// 위와 같이 iostream을 반복해 참조하면 컴파일 단계에서 .obj 파일의 용량이 증가한다.
[ 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.h를 obj파일로 만들고, main.cpp도 obj파일로 만들게 되는데 이때 TestFunc()가중복되기 때문
Module은 딱 한번 import 된다!
import 순서에 상관 없다!
import 순서에 상관 없다!
Module 이름 지정 가능!
인터페이스 / 구현부 분리 관리 필요성 사라짐!
프로젝트 - 모듈 추가 클릭

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

생성 후 기본 세팅

export 
import후 사용 
export할 함수들을 {}로 묶어주어 관리 
import후 사용 
export할 함수들을 namespace로 묶어주어 관리 
namespace:: 후 사용 
export 키워드를 미사용 
주로 쓰일 문법
sub module만 독립적으로 사용 가능
일종의 약속

- module 파일의 위쪽에 위 처럼 작성해준다.
Math.Time 처럼 Math의 하위 개념의 기능들을 또 다른 module로 엮어 관리할 수 있다.
- 시간과 관련된 기능들을 묶어놓은 Time module 은 module 이름을 Math.Time으로 지정해 마치 접근 연산자를 사용한 것과 같은 효과를 주어 사용 한다.
Math.Time 앞 import
- Math.Time을 해당 module 에서만 사용 하겠다
Math.Time 앞 export import
- Math.Time을 해당 module 에서도 사용 하고 Math만 import 해도 사용 가능


import후 사용 
