[c++] 불완전한 데이터 타입

데이터 타입은 C++ 프로그래밍에서 매우 중요합니다. C++에서 불완전한 데이터 타입(uncomplete data type)은 데이터 타입의 선언만 되고 정의가 되지 않은 경우를 가리킵니다.

예를 들어, 다음과 같이 선언된 class가 있을 때:

class MyData;

여기서 MyData는 선언만 되었지만 정의가 되지 않은 불완전한 데이터 타입이 됩니다.

이와 달리, MyData가 다음과 같이 정의된 경우:

class MyData {
    // class implementation
};

여기서 MyData는 정의됨에 따라 완전한 데이터 타입이 됩니다.

불완전한 데이터 타입은 포인터나 참조에 사용될 수 있지만, 객체를 생성하거나 멤버에 접근하는 데에는 사용될 수 없습니다.

불완전한 데이터 타입의 활용

불완전한 데이터 타입은 주로 클래스 선언을 분리할 때나 순환 참조(circular reference) 문제를 해결할 때 유용하게 사용됩니다.

순환 참조는 두 개 이상의 클래스가 서로를 참조하는 상황을 가리키는데, 이럴 때 한 클래스를 불완전한 데이터 타입으로 선언하고 다른 클래스에서 사용하면 이 문제를 해결할 수 있습니다.

class ClassA;

class ClassB {
    ClassA* objA;
};

요약

불완전한 데이터 타입은 C++에서 클래스나 구조체를 선언하고 이를 나중에 정의하는 데에 사용됩니다. 포인터나 참조에 사용할 수 있지만, 객체를 생성하거나 멤버에 접근하는 데에는 제한이 있습니다. 또한 순환 참조 문제를 해결할 때에도 활용됩니다.

참고 자료