C++ 클래스 이름 뒤의 세미콜론: 전방 선언(Forward Declaration)
C++ 코드를 보다가 다음과 같은 문장을 만난 적이 있으신가요?
class Person;
이처럼 클래스 이름 뒤에 세미콜론만 붙여 선언하는 것을 전방 선언(Forward Declaration)이라고 합니다.
전방 선언이 하는 일
전방 선언은 컴파일러에게 "Person이라는 이름의 클래스가 존재한다"는 사실을 미리 알려주는 역할을 합니다. 이렇게 하면 이후 코드에서 Person이라는 이름을 사용하더라도 컴파일러가 오류를 내지 않고 그대로 통과시킵니다.
다만 이 시점에는 클래스의 실제 정의(멤버 변수, 멤버 함수 등)가 없기 때문에, 실제 구현부는 나중에 링커(Linker)가 찾아서 연결해 줍니다.
전방 선언이 유용한 이유
전방 선언은 다음과 같은 상황에서 특히 유용합니다.
- 불필요한 헤더 포함 방지: 포인터나 참조 타입으로만 클래스를 사용할 경우, 무거운 헤더 파일을 include하지 않고 전방 선언만으로 충분합니다.
- 순환 참조 해결: 두 개의 헤더 파일이 서로를 include하는 순환 의존성 문제를 전방 선언으로 깔끔하게 해결할 수 있습니다.
- 컴파일 시간 단축: 헤더 포함을 줄이면 전체 프로젝트의 빌드 속도가 향상됩니다.
주의할 점
전방 선언된 클래스는 크기를 알 수 없으므로, 객체를 직접 생성하거나 멤버에 접근하려면 반드시 해당 클래스의 완전한 정의가 포함되어야 합니다. 즉, 전방 선언은 포인터나 참조 선언 용도로 제한적으로 사용하는 것이 좋습니다.