reference:
"명품 C++ Programming" / 황기태
"전문가를 위한 C++" / 마크 그레고리
클래스마다 클래스의 선언부와 구현부를 헤더 파일과 cpp 소스 파일로 분리하면 전체 프로그램을 관리하기 쉽고 클래스를 재사용하기 쉽다.
클래스를 활용하는 코드들은 클래스에 대한 선언이 필요하므로, 클래스의 선언부가 들어있는 헤더 파일만 include하여 사용하면 된다.
만일 헤더 파일에 클래스의 구현부가 들어있다면, 헤더 피일을 include하는 여러 소스파일에 구현부가 중복하여 들어가게 되므로, 링크 시 오류가 발생한다.
참고로 C++ 컴파일러는 cpp 파일들만 컴파일하며 헤더 파일만 따로 컴파일 하지 않는다.
헤더 파일은 링킹 과정의 지침서와 같은 역할인듯..?
헤더 파일을 중복으로 include하면, 중복 선언으로 인해 컴파일 오류가 발생할 수 있다. 이러한 문제는 의지와 상관없이 발생할 수 있다는 것인데, 헤더 파일 안에 또 내부적으로 다른 헤더를 include 하기 때문이다.
해결책으로 헤더 파일안 조건 컴파일 문을 삽입하면된다.
#ifdef CIRCLE_H
#defineCIRCLE_H
// 헤더 파일 내용
// 클래스 선언
#endif
위 코드와 같이 상수(클래스의 이름으로 하는 것이 좋음) 선언 유무를 통해 중복 include를 방지할 수 있다.