[C++] 헤더 파일과 cpp 파일의 분리

HY K·2024년 8월 23일

명품 C++ 프로그래밍

목록 보기
15/24

이번 포스팅에서는 C++ 코드의 작성 방법 중 하나인, 헤더 파일과 cpp 파일의 분리에 대해서 알아보자.

C++의 소스 코드는 통상적으로 다음과 같이 작성하는 경우가 많다.

  • 함수나 클래스의 선언부는 헤더 파일에, 구현부는 cpp 파일에 작성
  • main() 함수와 전역 변수는 1개 이상의 cpp 파일에 나누어 작성

클래스마다 클래스의 선언부와 구현부를 헤더 파일와 cpp 파일로 분리하여 작성한다면 프로그램 관리 및 클래스 재사용을 하기 용이하다는 장점이 있다. 클래스를 활용하는 프로그램의 경우 구현부는 따로 include 할 필요 없고, 오직 클래스 선언부만이 들어가 있는 헤더 파일이 필요하기 때문이다.

한번 작성해보자.

Circle.h

class Circle {
private:
	int radius;
public:
	Circle();
	Circle(int r);
	double getArea();
};

Circle.cpp

#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;
}

main.cpp

#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 되지 않는다.

profile
로봇, 드론, SLAM, 제어 공학 초보

0개의 댓글