1. C/C++ cpp, h 파일 분할하는 방법. |
cpp(또는 c), h 파일을 분할하는 방법은 선언부와 정의부를 따로 관리할 수 있다는 장점이 있습니다. 이러한 점은 가독성에도 도움을 줍니다.
입문한 지 얼마 안되신 분들은 cpp와 헤더 파일을 따로 나누는 것에 복잡함을 느끼실 수 있습니다. 또한, 굳이 나눌 필요가 없는 정도의 프로그램만 작성하신 분들은 경험이 없을 수도 있습니다.
하지만, 한번만 파일을 나눠보신다면 생각보다 어렵지 않은 작업이고, 이후에는 나누어서 개발을 하게되는 자신을 보시게 될 것입니다. 따라서 이번에는 파일을 분할하는 방법을 정리하고자 합니다.
먼저, 제가 간단하게 작성한 코드를 보겠습니다.
CppClass.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include <iostream> #define SPEED_MIN 0 #define SPEED_MAX 99 using namespace std; enum { small = 0, big, flower, star, fly }; class Mario { enum { down = -10, up = 10, }; private: int age; ///< char status; ///<마리오의 상태. int speed; ///< public: int Age(void) { return age; } void setAge(int _age) { age = _age; } char Status(void) { return status; } void setStatus(char _status) { status = _status; } int Speed(void) { return speed; } void setSpeed(int _speed) { speed = _speed; } void speedAccel(bool upAndDown); void printMarioStatus(); }; void Mario::speedAccel(bool upAndDown) { if (upAndDown) { speed += up; } else { speed += down; } cout << "current speed : " << speed << endl; } void Mario::printMarioStatus() { cout << "age = " << age << endl; cout << "status = " << (int)status << endl; cout << "speed = " << speed << endl; } int main(void) { Mario p1, p2; p1.setAge(15); p1.setStatus(big); p1.setSpeed(SPEED_MIN); cout << "age : " << p1.Age() << " status : " << (int)p1.Status() << " speed : " << p1.Speed() << endl; return 0; } | cs |
아직 cpp와 h를 나누지 않았습니다. 물론, 이 정도의 코드는 굳이 나눌 필요가 없습니다. 가독성을 망치는 정도는 아니니까 말입니다. 하지만, 더 큰 프로그램을 이런 식으로 구현했다가는 문제 수정 시에 당신은 엄청난 고통을 받게 되겠죠?
따라서 저는 cpp와 h를 다음과 같이 나누어 보겠습니다.
- h 파일 (헤더파일) : 클래스의 선언을 담는 부분입니다.
- c/cpp 파일 : 클래스의 정의를 담는 부분입니다.
HeaderFileDivision.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #ifndef __HEADER_FILE_DIVISION__ #define ___HEADER_FILE_DIVISION__ #include <iostream> #define SPEED_MIN 0 #define SPEED_MAX 99 using namespace std; enum { small = 0, big, flower, star, fly }; class Mario { enum { down = -10, up = 10, }; private: int age; ///< char status; ///<마리오의 상태. int speed; ///< public: int Age(void) { return age; } void setAge(int _age) { age = _age; } char Status(void) { return status; } void setStatus(char _status) { status = _status; } int Speed(void) { return speed; } void setSpeed(int _speed) { speed = _speed; } void speedAccel(bool upAndDown); void printMarioStatus(); }; #endif |
HeaderFileDivision.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include "HeaderFileDivision.h" void Mario::speedAccel(bool upAndDown) { if (upAndDown) { speed += up; } else { speed += down; } cout << "current speed : " << speed << endl; } void Mario::printMarioStatus() { cout << "age = " << age << endl; cout << "status = " << (int)status << endl; cout << "speed = " << speed << endl; } int main(void) { Mario p1, p2; p1.setAge(15); p1.setStatus(big); p1.setSpeed(SPEED_MIN); cout << "age : " << p1.Age() << " status : " << (int)p1.Status() << " speed : " << p1.Speed() << endl; return 0; } | cs |
이런 식으로 cpp와 h파일을 분할할 수 있습니다. 이러한 분할 방법으로, 가독성을 높일 수 있습니다. 또한, 유지 보수나 더 나은 코드로 업그레이드 할 때도 더 쉽게 접근할 수 있겠습니다.
제 글이 도움이 되셨거나 공감이 되시는 부분이 있으셨다면, 밑에 있는 공감 버튼 한 번씩 꾸욱 눌러주시면 감사하겠습니다.
공감 버튼은 저에게 큰 도움이 됩니다. 감사합니다.
'프로그래밍 > C || CPP' 카테고리의 다른 글
[C/C++] 함수포인터(function pointer) 정리 (0) | 2017.05.30 |
---|---|
[C/C++] 연산자 정리 (0) | 2017.05.28 |
C/C++ 가변인자 (variable argument) (2) | 2017.05.21 |
[C++ 정복하자] C에서 C++로 가기 위한 도약. [2] (0) | 2017.05.17 |
[C++ 정복하자] C에서 C++로 가기 위한 도약. [1] (0) | 2017.05.14 |
댓글