C++에서 정방향 선언(forward declaration)은 선언부 이후에 등장하는 코드에게 "Person이라는 이름의 클래스가 존재한다"는 사실을 미리 알려주는 역할을 합니다. 덕분에 컴파일러는 해당 이름이 사용되는 것을 보아도 오류 없이 통과시키며, 실제 클래스의 정의는 나중에 링커(linker)가 찾아 연결해 줍니다.
예제 코드
class Person;
void myFunc(Person p1) {
// ...
}
class Person {
// 여기에 클래스 정의 작성
};위 예제에서 컴파일러가 myFunc 함수를 만나면, Person 클래스가 코드 어딘가 아래쪽에서 정의될 것이라는 사실을 이미 알고 있기 때문에 문제없이 컴파일을 진행합니다.
정방향 선언이 유용한 경우
정방향 선언은 클래스를 사용하는 코드가 클래스 정의보다 앞쪽에 위치하거나, 헤더 파일의 포함 순서상 정의가 나중에 등장하는 경우에 특히 유용합니다. 이를 통해 불필요한 헤더 파일 포함을 줄여 컴파일 시간을 단축하고, 순환 참조(circular dependency) 문제도 해결할 수 있습니다.
주의할 점
다만 정방향 선언만으로는 포인터나 참조 타입으로 클래스를 다루는 것까지만 가능합니다. 객체를 직접 생성하거나 클래스의 멤버 변수·멤버 함수에 접근하려면 반드시 완전한 클래스 정의가 필요하다는 점을 기억하세요.