전방 선언(Forward Declaration)

2022. 9. 13. 09:17UnrealEngine/개념

 

 언리얼 엔진에서 C++ 클래스를 코딩할때 특정 클래스의 포인터 앞에 class를 붙여주는 경우를 볼 수 있다.

 이것은 '전방 선언(Forward Declaration)'이라고 하며 헤더끼리의 의존성을 최소화 하기 위해 쓰여지는 방법이다.

 

 Pawn 클래스에서 CapsuleComponent를 사용하려고 하면 UCapsuleComponent 클래스에 대한 정보가 필요하다.

 이때 가장 먼저 생각할 수 있는 방법은 Pawn의 헤더파일(.h)의 상단에 CapsuleComponent의 헤더를 include하는 방법이다.

 

 하지만 해당 방법을 이용했을 때 Pawn 클래스의 헤더에 CapsuleComponent의 헤더가 추가되게 되면서 Pawn 헤더 자체의 크기가 늘어나게 된다. 또한 CapsuleComponent의 헤더 파일이 변경된다면 CapsuleComponent의 헤더뿐 아니라 Pawn 클래스의 헤더까지 재컴파일이 이루어지게 된다.
 추후 Pawn 클래스를 다른 클래스에서 사용해야 할 때도 Pawn의 헤더를 해당 클래스의 헤더에 추가하게 되면 CapsuleComponent가 필요 없는 클래스(기능)라고 하더라도 헤더에 CapsuleComponent의 헤더가 더해지게 될 것이다.
 이러한 관계가 진행될수록 하위 단계의 헤더 파일 자체의 크기는 점점 커질 테고 그러한 헤더를 컴파일하는 시간도 늘어나게 된다. 이것으로 인해 헤더 의존성에 의한 컴파일 시간이 기하급수적으로 늘게 되는 결과를 초래한다.

 

 각 클래스의 헤더 파일에선 어떠한 특정 클래스를 선언하더라도 기능 구현에 대해선 .cpp에 일임하므로 헤더파일을 include하는건 .cpp 파일에 한정하도록 한다.

 이러한 방법을 사용하면 두 클래스가 서로를 참조해야 할 때 발생하는 상호 참조에 대한 오류도 방지할 수 있다.

 헤더파일에서 다른 클래스에 대해 선언할때는 변수의 크기를 특정지을수 있는 포인터 변수를 사용하도록 하며 해당 변수 앞에 class를 추가하여 해당 클래스의 존재를 알아차리도록 하는 것이 클래스의 '전방 선언'이다.

 

'UnrealEngine > 개념' 카테고리의 다른 글

Player Input  (0) 2022.09.13
Actor, Pawn, Character  (0) 2022.09.13
Delta Time  (0) 2022.09.13
Unreal Architecture  (0) 2022.08.31
Blueprint vs C++  (0) 2022.08.29