FORCEINLINE
C++ 표준의 inline 키워드는 "인라인화를 제안"하는 역할로, 컴파일러가 해당 함수를 호출 위치에 직접 붙여넣도록 권장합니다. 단, 복잡한 함수라면 무시할 수도 있고, 명시 없이도 인라인화될 수 있습니다.
반면에 Unreal Engine에서의 FORCEINLINE Macro는 인라인화를 '강제'한다.
언제 FORCEINLINE을 사용할까?
- 반환자, Getter/Setter, 간단한 연산
text
FORCEINLINE float GetSpeed() const { return Speed; }Inline의 효율성과 장점
| 항목 | 설명 |
|---|---|
| 🔄 함수 호출 오버헤드 제거 | 호출 스택 생성 없이 코드를 직접 삽입 → call/ret 비용 제거 |
| 🚀 성능 향상 가능 | 작은 함수들이 반복적으로 호출되는 경우에 성능 개선 |
| 🧠 가독성과 유지보수 향상 | 코드 중복 없이 로직을 정리할 수 있음 (FORCEINLINE bool IsValid() { return Ptr != nullptr; }) |
| 📦 템플릿 코드 최적화에 유리 | 헤더에서 정의된 템플릿 함수들은 인라인화되며, 최적화가 잘 됨 |
Inline 사용 시 주의점
| 항목 | 설명 |
|---|---|
| ⚠️ 함수 내용이 너무 복잡하면 비효율적 | 인라인 함수가 너무 길거나 조건문이 많으면 오히려 캐시 부담 증가 |
| 📈 코드 크기 증가 (Code Bloat) | 동일 함수가 여러 곳에 인라인되면 바이너리 크기 증가 가능 |
| 🚫 가상 함수, UFUNCTION 등에는 부적절 | 가상 함수는 런타임 디스패치를 위해 인라인화가 불가능함 |
| ⚠️ 디버깅 어려움 | 인라인 함수는 실제 함수 호출이 없기 때문에 스택 트레이스에서 잘 보이지 않을 수 있음 |
| 📉 성능 저하 가능성 | 너무 많은 인라인으로 인해 캐시 미스 및 분기 예측 실패 등 부작용 발생 가능 |