본문 바로가기
개발이야기/언리얼 c++

언리얼 C++: 인라인 함수 (FORCEINLINE)

by oddsilk 2024. 5. 24.

인라인 함수란?

인라인 함수는 함수 호출을 하는 대신, 그 함수를 호출하는 코드에 함수의 본문을 직접 삽입하는 것을 의미합니다. 이렇게 하면 함수 호출에 따른 오버헤드(추가적인 비용)가 줄어들어 프로그램이 더 빠르게 실행될 수 있습니다.

레고 블록을 조립하는과정에 비유해보자

  • 일반 함수: 마치 레고 블록을 조립할 때 매번 설명서를 꺼내서 다음 블록이 무엇인지 확인하고 조립하는 과정입니다. 설명서를 보는 데 시간이 걸립니다.
  • 인라인 함수: 설명서의 내용을 머릿속에 외워서 매번 설명서를 보지 않고 바로 레고 블록을 조립하는 것과 같습니다. 설명서를 보는 시간이 없기 때문에 더 빨리 조립할 수 있습니다.

코드 예시로 이해하기

인라인 함수는 특히 게임 개발처럼 성능이 중요한 분야에서 많이 사용되며, FORCEINLINE은 언리얼엔진에서 이 과정을 강제로 수행하도록 하는 매크로입니다. 

일반 함수

int Add(int a, int b) {
    return a + b;
}

int main() {
    int result = Add(3, 4); // Add 함수를 호출합니다.
    return 0;
}

여기서는 Add 함수를 호출할 때마다 프로그램이 Add 함수로 이동한 후 결과를 가져옵니다. 이 과정에서 함수 호출에 따른 약간의 시간이 걸립니다.

인라인 함수

FORCEINLINE int Add(int a, int b) {
    return a + b;
}

int main() {
    int result = Add(3, 4); // Add 함수의 내용이 직접 여기에 삽입됩니다.
    return 0;
}

여기서는 Add 함수가 인라인되어, 함수 호출 대신 Add 함수의 내용이 직접 main 함수 안에 삽입됩니다. 그래서 Add 함수로 이동하는 시간이 없어져 더 빠르게 실행됩니다.

 

주석과 함께 자세히 설명

// 인라인 함수를 사용하면 함수 호출 대신 함수의 내용을 직접 삽입합니다.
// 이렇게 하면 함수 호출에 따른 시간을 절약할 수 있습니다.
FORCEINLINE int Add(int a, int b) {
    return a + b; // 이 함수는 두 숫자를 더한 값을 반환합니다.
}

int main() {
    // result는 Add(3, 4)의 결과인 7이 됩니다.
    // 여기서 Add 함수가 호출되는 대신, 아래와 같이 동작합니다:
    // int result = 3 + 4;
    int result = Add(3, 4); // Add 함수가 인라인되어 직접 삽입됩니다.
    return 0;
}

이제 인라인 함수의 개념이 좀 더 이해되셨나요?

 

인라인 함수는 특히 게임 개발처럼 성능이 중요한 분야에서 많이 사용되며, Unreal Engine 5에서도 성능 최적화를 위해 이러한 인라인 함수를 적절히 사용하고 있습니다.