본문 바로가기

C++

C++이 header, cpp 파일로 나누는 이유

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강

https://youtu.be/TZSYo8ItJjE

 
 
 
 
 

 

헤더파일의 의미

https://youtu.be/QAxjN0KUaLo