“연관 있는 데이터를 하나로 묶으면, 프로그램의 구현 및 관리가 용이하다.”
소프트웨어를 단순히 표현하면 다음과 같다.
“소프트웨어 = 데이터의 표현 + 데이터의 처리”
C언어에서 구조체 변수를 선언하는 방법은 다음과 같다
struct Car basicCar;
struct Car simpleCar;
struct 를 생략하려면 별도의 typedef 선언을 추가해야 한다. 하지만 C++ 에서는 기본 자료형 변수의 선언방식이나 구조체를 기반으로 정의된 자료형의 변수 선언방식에 차이가 없다. 즉, C++ 에서는 별도의 typedef 선언 없이도 다음과 같이 변수를 선얼할 수 있다.
Car basicCar;
Car simpleCar;
함수는 결국 데이터의 처리를 담당하는 도구이니, 데이터와 함께 부류를 형성하는 것은 매우 당연하다.
“구조체 Car와 함께 부류를 형성하여, CAR와 관련되 데이터의 처리를 담당하는 함수들이다.”
따라서 위의 함수들은 구조체 Car에 종속적인 함수들이라고 말할 수 있다. 그럼에도 불구하고 전역 함수의 형태를 띠기 떄문에, 이 함수들이 구조체 Car에 종속적임을 나타내지 못하고 있는 상황이다. 따라서 엉뚱하게도 다른 영역에서 이함수를 호출하는 실수를 범할 수도 있는 상황이다.
C++ 에서는 구조체 안에 함수를 삽입하는 것을 허용한다.
//삽입되기 전
void ShowCarState(const Car &car)
{
cout << "소유자ID: "<< car.gamerID << endl;
cout << "연료량: " << car.fuelGauge << "%" << endl;
cout << "현재속도: " << car.curSpeed << "km/s" << endl; << endl;
}
//삽입 후
void ShowCarState()
{
cout << "소유자ID: "<< gamerID << endl;
cout << "연료량: " << fuelGauge << "%" << endl;
cout << "현재속도: " << curSpeed << "km/s" << endl; << endl;
}
메크로 상수들은 전역적으로 사용 가능하다. enum 을 사용해 구조체 안에 넣어줄 수 있다. 포함시키는것이 좋을 수 있다. (상황마다 달라질 수 있다.)
struct Car
{
enum
{
ID_LEN = 20;
MAX_SPD = 200;
...
}
char gamerID[ID_LEN];
...
}
enum 의 선언을 구조체 내부에 삽입하는 것이 부담스럽다면, 이름공간을 이용해서 상수가 사용되는 영역을 명시하는 것도 또 다른 방법이 될 수 있다.