함수 호출 시 발생하는 오버헤드를 줄이기 위해 함수의 본문을 호출 지점에 직접 삽입하는 인라인 함수(Inline Function)는 성능 최적화를 위한 기술이다.
인라인 함수의 정의 및 구현
inline 키워드를 함수 선언 앞에 붙여 컴파일러에게 인라인 처리를 요청한다.
#include <iostream>
// 인라인 함수 정의
inline int Square(int x) {
return x * x;
}
int main() {
// 컴파일 시 Square(5)는 5 * 5로 직접 치환될 수 있음
int result = Square(5);
std::cout << "Result: " << result << std::endl;
return 0;
}
매크로 함수와의 차이점
인라인 함수는 #define 매크로 함수의 단점을 보완한다.
- 타입 체크: 인라인 함수는 컴파일러가 매개변수의 타입을 검사하므로 안전하다.
- 디버깅: 매크로와 달리 호출 스택 정보가 유지되어 디버깅이 용이하다.
- 부작용 방지: 매크로에서 흔히 발생하는 의도치 않은 연산 우선순위 문제를 방지한다.
주의사항 및 한계
- 컴파일러의 판단:
inline은 요청일 뿐이며, 함수가 너무 복잡하거나 재귀적인 경우 컴파일러가 이를 무시할 수 있다. - 코드 비대화 (Code Bloat): 함수 본문이 길면 실행 파일의 크기가 커지고, 이는 오히려 캐시 미스를 유발하여 성능을 떨어뜨릴 수 있다.
- 적용 대상: 주로 한두 줄 정도의 짧은 함수나 빈번하게 호출되는 접근자(Getter/Setter)에 사용한다.
P.S
인라인 함수는 함수 호출의 편의성과 직접 코드 삽입의 성능 이점을 동시에 제공한다.
함수의 크기와 호출 빈도를 고려하여 적절히 활용하는 것이 중요하는 것 같다.