정의
인라인 함수(inline function)는 함수 호출 시 발생하는 오버헤드(스택 프레임 생성·복귀 등)를 피하기 위해, 함수 본문을 호출 지점에 직접 삽입하여 실행하도록 컴파일러에 힌트를 제공하는 프로그래밍 기법이다. 일반적으로 C, C++ 등에서 inline 키워드로 선언한다.
주요 특성
- 성능 최적화
- 함수 호출 비용을 제거함으로써 특히 짧고 자주 호출되는 함수의 실행 속도를 향상시킬 수 있다.
- 코드 크기 증가 가능성
- 인라인 전개가 여러 호출 지점에 복제되므로, 전체 바이너리 크기가 커질 수 있다.
- 컴파일러 판단에 의존
inline지정은 강제가 아니라 권고이며, 최적화 옵션에 따라 컴파일러가 인라인 여부를 결정한다.
- 제한 사항
- 재귀 호출, 복잡한 제어 흐름, 큰 함수 본문 등은 인라인 전개가 제한될 수 있다.
- 일부 언어에서는 인라인 함수를 정의만 제공하고 실제 전개 여부는 전 단계(링크 단계)에서 결정한다.
사용 사례
- 헤더 파일에 정의된 짧은 함수: 템플릿 함수, 접근자(getter)·설정자(setter) 등.
- 성능이 중요한 루프 내부: 루프 내에서 반복 호출되는 간단 연산.
- 조건부 컴파일: 매크로와 결합해 디버그/릴리스 빌드에서 다른 구현을 제공.
언어별 구현 예시
| 언어 | 인라인 지정 방법 | 비고 |
|---|---|---|
| C, C++ | inline 키워드 (예: inline int add(int a, int b) { return a+b; }) |
C++17 이후 constexpr 함수는 자동 인라인 가능 |
| Java | static final 메서드 혹은 JIT 컴파일러가 자동 인라인 |
명시적 키워드 없음 |
| C# | MethodImplOptions.AggressiveInlining 어트리뷰트 사용 |
JIT 최적화에 의존 |
| Rust | #[inline], #[inline(always)] 속성 |
컴파일러 힌트 제공 |
어원 및 용어 설명
- 인라인(inline): 영어 “inline”에서 차용한 용어로, “한 줄에”, “연속해서”라는 의미를 가진다.
- 함수(function): 프로그램 코드에서 특정 작업을 수행하는 독립적인 코드 블록을 의미한다.
따라서 “인라인 함수”는 “코드 흐름 안에 직접 삽입되는 함수”라는 의미를 갖는다.
참고 사항
인라인 함수는 컴파일러와 최적화 옵션에 따라 실제 전개 여부가 달라질 수 있으며, 무조건적인 사용은 코드 크기와 캐시 효율에 부정적 영향을 미칠 수 있다. 따라서 성능 프로파일링 결과에 기반하여 적용 여부를 판단하는 것이 바람직하다.