인라인 함수 (In-Line Function)
인라인 함수를 설명하기 위해서는 먼저, 오버헤드(Overhead)를 알아야 한다.
오버헤드란 어떤 작업을 수행하는 데 필요한 추가적인 처리나 리소스를 의미한다.
함수를 호출하게 되면, 매개변수 전달, 반환 주소 저장, 지역 변수 할당 등의 콜 스택(Call Stack)을 사용하게 된다.
#include <iostream>
inline int Add(int a, int b) // 매개변수를 스택에 저장
{
return a + b; // 리턴 값을 임시 저장소에 저장
}
int main()
{
std::cout << Add(5, 1) << "\n"; // 함수 호출 시점, 이곳의 주소값을 스택에 저장
}
인라인 함수는 이런 함수 호출 오버헤드를 감소시키기 위해 만들어진 기능이다.
이는 함수 호출 과정을 거치지 않고, 함수의 모든 코드를 호출된 자리에 바로 삽입하는 방식의 함수이다.
C에서의 #define과 코드를 그대로 사용한다는 점에서 비슷하다.
C++에서는 #define 매크로뿐만 아니라 인라인이라는 특별한 키워드를 추가했다.
인라인 함수의 사용 및 장단점
인라인 함수의 사용법은 함수 선언 시에 inline이라는 키워드를 앞에 붙이면 된다.
#include <iostream>
inline int Add(int a, int b)
{
return a + b;
}
int main()
{
//std::cout << Add(5, 1) << "\n";
std::cout << 5 + 1 << "\n"; // 이 코드로 대체
}
이 코드가 컴파일되면, 함수 호출이 마지막 줄과 같이 대체되어 실행된다.
이와 같이 함수 호출 구분이 함수 본문으로 완전히 대체되는 것을 ‘함수가 인라인(inline)화 되었다’라고 표현한다.
위의 코드를 통해서 매크로 함수의 호출 구문이 함수의 본문으로 완전히 대체된다는 것을 알 수 있다.
이렇게 함수 본문으로 대체되면, 함수의 호출 과정이 사라지기 때문에 성능 상의 이점을 얻을 수 있다. (함수 호출에 필요한 콜 스택(Call Stack)을 사용하지 않기 때문이다).
그러나, 인라인 함수의 단점은 메모리 사용 측면에서 일반 함수보다 불리하다.
인라인 함수는 함수를 호출하는 경우가 몇 번이 되었든 컴파일러는 인라인 함수의 사본을 호출한 부분에 계속해서 삽입해야 하기 때문에 그만큼 메모리의 낭비가 있을 수 있다.
정리하자면
- C++에서는 함수 호출의 성능 향상을 위해 inline 키워드를 사용해 인라인 함수를 만들 수 있다.
- 매크로를 활용한 인라인화는 전처리기가 처리하지만 inline 키워드를 사용한 함수의 인라인화는 컴파일러가 처리한다.
- 또한, 컴파일러에 따라서 inline 선언이 오히려 성능 향상에 방해가 된다고 판단하면, 인라인 함수로 만들지 않는다.
헤더 파일 함수 구현
헤더 파일에서 함수를 선언과 구현을 같이하면, 이 함수를 사용할 때에는 inline 키워드를 붙여줘야 한다.
다음과 같이, 헤더 파일에서 Add 함수 선언과 구현을 같이했다.
이를 다른 곳에서 사용하려 하면 inline 키워드를 붙여줘야 사용이 가능하다.
// .h
namespace Test
{
int Add(int a, int b) { return a + b; }
}
'📕Programming > 📝C/C++' 카테고리의 다른 글
| [C / C++] 메모리 누수 찾기 (0) | 2025.07.16 |
|---|---|
| [C / C++] C++ 동작 방식 (0) | 2025.07.15 |
| [C / C++] 스마트 포인터(Smart Pointer) (0) | 2023.12.06 |
| [C / C++] 완벽 전달(Perfect Forwarding)과 std::forward (0) | 2023.12.05 |
| [C / C++] 오른 값 참조(R-Value Reference)와 Move Semantics (0) | 2023.12.04 |