POD는 C++에서 Plain Old Data(직역하면 '평범하고 오래된 데이터')를 뜻하는 약어입니다. 이름 그대로 C 스타일의 단순한 데이터 구조를 의미하며, 멤버 변수만 가지고 있고 메서드, 생성자, 소멸자, 가상 함수 등이 전혀 없는 클래스 또는 구조체를 말합니다.
예제 코드
#include<iostream>
using namespace std;
// POD
struct MyStruct {
int key;
string data;
};
int main() {
struct MyStruct s;
s.key = 1;
s.data = "hello";
return 0;
}
위 예제의 MyStruct는 사용자가 직접 정의한 생성자나 소멸자 등이 없기 때문에 POD에 해당합니다.
집합체(Aggregate)란 무엇인가?
집합체(aggregate)는 다음 조건을 모두 만족하는 배열 또는 클래스를 의미합니다.
- 사용자가 선언한 생성자가 없을 것
- private 또는 protected로 선언된 비정적(non-static) 데이터 멤버가 없을 것
- 기반(base) 클래스가 없을 것
- 가상 함수가 없을 것
집합체가 POD가 되는 조건
집합체 클래스는 아래 조건까지 추가로 충족할 경우 POD로 분류됩니다.
- 사용자가 정의한 복사 대입 연산자(copy-assignment operator)와 소멸자가 없을 것
- 모든 비정적 멤버가 비-POD 클래스, 비-POD 배열, 또는 참조(reference)가 아닐 것
즉, POD는 초기화와 복사가 단순하게 이루어지며 메모리 레이아웃이 예측 가능한 구조이기 때문에, C 언어와의 상호 운용성이 중요한 상황에서 특히 유용하게 활용됩니다.