Declaration : header
Definition : cpp
'정의' 부분인 cpp파일에 header를 복사 붙여넣기로 선언부를 가져오는 형태이다.
'선언' 부분인 header에 '정의' 내용까지 모두 포함시킬 수 있는데 왜 나눌까?
이를 알기 위해서는 컴파일 프로세스를 이해해야 한다.
a.cpp 파일은 a.h를 포함
b.cpp 파일은 a.h, b.h를 포함
위와 같은 상황일 때 cpp파일은 각각의 오브젝트 파일을 만들어 낸다.
b.obj 파일을 만들 때 a의 cpp파일인 '정의' 부분 없이 header파일인 '선언'만 가지고도 b.obj 파일을 만들 수 있다.
b.obj 파일은 a객체를 사용한다라는 정보만 담기게 된다.
코드가 동작하는데 b.obj에도 a 객체를 사용하기 때문에,
분명히 a의 정의부분이 필요하지만 이 부분은 비어있는 상태로 존재하고,
이 비어있는 부분을 실행가능하게 해주는 역할이 Linking 과정이다.
Library나 exe파일을 만드는 과정에서 Linker가 비어있는 부분을 하나로 묶어주는 역할을 한다.
이렇게 Preprocess로 복사한 header를 기준으로,
Linker가 각각의 obj를 연결하고,
obj별로 독립적으로 컴파일할 수 있는 프로세스는
헤더, cpp파일을 분리했기 때문에 가능한 과정이다.
참고
C++ 헤더파일 cpp파일로 왜 나눌까? 강의 강좌 프로그래밍 10강
헤더파일의 의미