Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C/C++ 전방 선언(Forward Declaration)은 언제 사용할 수 있을까?

전방 선언이란?

전방 선언(Forward Declaration)은 선언 이후에 등장하는 코드에게 특정 이름의 클래스가 존재한다는 사실을 미리 알려주는 기능입니다. 이를 통해 컴파일러는 해당 이름이 사용되는 것을 보고도 오류 없이 컴파일을 진행할 수 있으며, 클래스의 실제 정의는 나중에 링커(Linker)가 찾아 연결하게 됩니다.

예제

class Person;

void myFunc(Person p1) {
    // ...
}

class Person {
    // 여기에 클래스 정의 작성
};

위 예제에서 컴파일러는 myFunc 함수를 만나는 시점에 Person 클래스가 코드 뒤쪽 어딘가에 정의되어 있다는 것을 이미 알고 있기 때문에, 아직 정의를 보지 못했더라도 문제없이 컴파일을 계속 진행할 수 있습니다.

전방 선언이 유용한 경우

전방 선언은 클래스를 사용하는 코드가 클래스 정의보다 먼저 배치되거나 포함되어야 하는 상황에서 특히 유용합니다. 대표적인 활용 사례는 다음과 같습니다.

  • 순환 참조 해결: 두 클래스가 서로를 참조해야 할 때, 헤더 파일을 무한히 포함하는 문제를 방지할 수 있습니다.
  • 컴파일 시간 단축: 헤더 파일 전체를 include 하는 대신 전방 선언만으로 불필요한 의존성을 줄일 수 있습니다.
  • 포인터·참조 사용 시: 클래스의 내부 구조를 몰라도 되는 포인터나 참조 타입으로만 객체를 다룰 때 활용할 수 있습니다.

단, 전방 선언만으로는 클래스의 크기나 멤버 정보를 알 수 없기 때문에, 객체를 직접 생성하거나 멤버에 접근하는 코드 앞에는 반드시 완전한 클래스 정의가 필요하다는 점을 유의해야 합니다.