이번 포스팅에서는 C++ 코드의 작성 방법 중 하나인, 헤더 파일과 cpp 파일의 분리에 대해서 알아보자.
C++의 소스 코드는 통상적으로 다음과 같이 작성하는 경우가 많다.
클래스마다 클래스의 선언부와 구현부를 헤더 파일와 cpp 파일로 분리하여 작성한다면 프로그램 관리 및 클래스 재사용을 하기 용이하다는 장점이 있다. 클래스를 활용하는 프로그램의 경우 구현부는 따로 include 할 필요 없고, 오직 클래스 선언부만이 들어가 있는 헤더 파일이 필요하기 때문이다.
한번 작성해보자.
class Circle {
private:
int radius;
public:
Circle();
Circle(int r);
double getArea();
};
#include<iostream>
using namespace std;
#include "Circle.h"
Circle::Circle() {
radius = 1;
cout << "반지름" << radius << endl;
}
Circle::Circle(int r) {
radius = r;
cout << "반지름" << radius << endl;
}
double Circle::getArea() {
return 3.14 * radius * radius;
}
#include<iostream>
#include "Circle.h"
using namespace std;
int main() {
Circle donut;
double area = donut.getArea();
cout << area << endl;
Circle pizza(30);
area = pizza.getArea();
cout << area << endl;
}
설마 그럴 일은 거의 없겠지만은, 만약 헤더 파일을 중복해서 include 하게 되면 컴파일 오류가 발생한다. 이를 방지하기 위해서, 헤더 파일에 조건 컴파일 문을 삽입하면 된다. Circle.h를 수정해보자.
#ifndef CIRCLE_H
#define CIRCLE_H
class Circle {
private:
int radius;
public:
Circle();
Circle(int r);
double getArea();
};
#endif
이렇게 선언할 경우, Circle.h가 처리될 때 #define CIRCLE_H에 의해서 상수가 정의된다. 만약 Circle.h를 2번 이상 main.cpp에서 include하고 있다면, 2번째 include를 처리할 때 CIRCL_H 상수가 이미 정의되어 있기 때문에 ifndef 조건문의 값이 false로 처리되어 endif로 빠져나오게 된다. 따라서 중복적으로 include 되지 않는다.