[ 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
후 사용