C++ 인라인 함수란?
C++의 인라인(inline) 함수는 클래스와 함께 자주 사용되는 강력한 개념입니다. 함수가 인라인으로 선언되면, 컴파일러는 컴파일 시점에 해당 함수가 호출되는 모든 지점에 함수 코드의 복사본을 직접 삽입합니다.
이러한 방식은 일반적인 함수 호출 과정에서 발생하는 오버헤드를 줄여 프로그램의 실행 속도를 향상시킬 수 있다는 장점이 있습니다.
인라인 함수 변경 시 주의사항
인라인 함수에 변경 사항이 발생하면, 컴파일러가 호출 지점마다 코드를 다시 교체해야 하므로 해당 함수를 사용하는 모든 클라이언트 프로그램을 다시 컴파일해야 합니다. 만약 재컴파일하지 않으면 프로그램은 계속 이전 버전의 기능으로 동작하게 됩니다.
인라인 함수 선언 방법
함수를 인라인으로 만들려면 함수 이름 앞에 inline 키워드를 붙이고, 함수가 호출되는 코드보다 먼저 함수를 정의해야 합니다.
단, 정의된 함수의 본문이 한 줄을 초과하는 경우 컴파일러는 inline 한정자를 무시할 수 있습니다. 즉, 인라인 여부는 결국 컴파일러가 판단합니다.
또한 클래스 정의 내부에서 정의된 함수는 inline 키워드를 명시하지 않아도 자동으로 인라인 함수로 처리됩니다.
예제 코드: 두 수의 최댓값 구하기
다음은 두 수 중 더 큰 값을 반환하는 인라인 함수를 활용한 예제입니다.
#include <iostream>
using namespace std;
inline int Max(int x, int y) {
return (x > y) ? x : y;
}
// 프로그램의 메인 함수
int main() {
cout << "Max (20,10): " << Max(20,10) << endl;
cout << "Max (0,200): " << Max(0,200) << endl;
cout << "Max (100,1010): " << Max(100,1010) << endl;
return 0;
}실행 결과
Max (20,10): 20 Max (0,200): 200 Max (100,1010): 1010
인라인 함수 사용 시 참고 사항
- 성능 향상: 함수 호출 오버헤드가 제거되어 짧은 함수의 반복 호출 시 유리합니다.
- 코드 크기 증가: 호출 지점마다 코드가 복사되므로, 큰 함수를 인라인으로 처리하면 실행 파일 크기가 커질 수 있습니다.
- 컴파일러 재량:
inline키워드는 요청일 뿐이며, 복잡한 함수(루프, 재귀 포함 등)는 컴파일러가 인라인하지 않을 수 있습니다. - 재컴파일 필요: 헤더 파일에 정의된 인라인 함수를 수정하면 이를 사용하는 모든 소스 파일을 다시 빌드해야 합니다.