[C++]인라인 함수 (Inline Function)

BC_kkingkkang·2025년 4월 17일
post-thumbnail

💡 짧고 자주 호출되는 함수라면, 굳이 호출하지 말고 그냥 붙여버리는 방법도 있다.

인라인 함수란?

인라인 함수는 함수 호출을 하지 않고, 함수 본문을 호출 위치에 그대로 삽입하도록 컴파일러에게 요청하는 방식이다.

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

int main() {
    // 컴파일 시 result = 3+5 로 대체된다.
    int result = Add(3, 5);
}

인라인 함수를 사용하면 컴파일러가 함수 호출을 없애고, 해당 함수의 코드를 호출한 곳에 직접 삽입(inline)한다. 이렇게 하면 함수 호출 과정 없이 코드가 실행되기 때문에 오버헤드가 사라진다.

이처럼 인라인 함수는 호출 오버헤드를 제거하여 성능을 높일 수 있는 방법이다.


인라인 함수의 장점

  • 함수 호출 오버헤드를 제거할 수 있다.
    • 짧은 함수가 반복적으로 호출될 때 성능 개선 효과가 크다.
  • 매크로 함수보다 안전하다.
    • 매크로 함수와 유사한 방식으로 작동하지만, 인라인 함수는 매개변수의 자료형을 검사하고, 디버깅도 가능하다는 장점이 있다.
    • 반면, C 언어의 매크로 함수는 단순한 텍스트 치환이기 때문에 타입 체크가 되지 않고, 디버깅도 어렵다.

인라인 함수의 단점

인라인 함수는 함수 호출을 없애고, 코드 자체를 복사해서 삽입하므로 함수가 크면 실행 파일의 크기도 커진다.
함수 코드의 크기가 크면, 함수 호출 오버헤드로 인해 성능 비용이 더 커질 수 있다. C++에서 함수를 사용하면 단순히 해당 함수로 점프하는 것이 아니라 다음과 같은 절차가 발생하는데...

  1. 현재 실행 중인 위치를 저장한다.
  2. 매개변수(인수)를 스택에 푸시한다.
  3. 함수의 내용을 실행한다.
  4. 결과를 반환하고 저장했던 위치로 되돌아간다.

이러한 일련의 과정을 반복하게 되면 함수 호출 오버헤드가 누적되어 성능 저하로 이어질 수 있다.
특히 짧고 자주 호출되는 함수에서는 이 오버헤드가 더욱 부담이 된다.

인라인 함수는 컴파일 타임에 치환되므로, 재귀적으로 호출하는 경우 제대로 동작하지 않는다.
이 말은 재귀 함수에는 인라인 최적화가 적용되기 어렵다 라는 뜻이다.

재귀 함수는 자기 자신을 간접 또는 직접적으로 계속 호출하는 함수인데 몇 번 호출될지는 실행(runtime) 중에 결정된다.
즉, 자기 자신을 호출하는 재귀 함수가 어디까지 호출할지 알 수 없기 때문에 대부분의 컴파일러는 재귀 함수에는 인라인 처리를 하지 않거나, inline 함수를 무시한다.

inline 키워드를 쓴다고 해서 반드시 인라인 처리되는 것은 아니다.
인라인 함수의 처리 여부는 최종적으로 컴파일러가 판단한다.
(예를 들어... inline 키워드를 써도, 컴파일러의 판단이 이건 너무 크니까 인라인 안 합니다~ 하면 무시된다...)

인라인 함수의 사용

다음과 같은 경우 인라인 함수 사용을 고려할 수 있다.

  • 함수 내용이 짧고 단순할 때
  • 반복문 내에서 자주 호출될 때
  • 성능 최적화가 중요한 상황일 때
  • 단순한 접근 함수일 때

인라인 함수는 무조건 사용한다고 좋은 것이 아니라, 적절한 상황에서 사용해야 효과를 볼 수 있다.

짧고 반복 호출되는 함수라면, 성능을 위해 인라인 함수로 선언하는 것이 좋다.

0개의 댓글