본문 바로가기

C++문법 공부

인라인 함수( inline function)

인라인 함수 라는 말을 처음 들었을 때는 무척 생소 했습니다.

인라인 스케이트도 아니고.. 무슨 인라인 함수야? 라고 생각 했는데

그렇게 어려운 개념은 아니었습니다.

 

#include <iostream>
using namespace std;

inline void PrintValue(int x){cout << "변수의 값은 " << x << "다." << endl;}
int main()
{
	int x = 10;
	PrintValue(x);
}

함수 선언 맨앞에 inline 이라는 키워드를 붙여주기만 하면 인라인 함수 완성입니다.

인라인 함수를 왜 사용하는가?

일반 함수 작동의 순서 부터 알아보겠습니다.

A(int x); 라고 함수가 선언되었다고 하겠습니다.

예제 코드에서는 선언과 정의가 동시에 되어있지만 대부분의 함수는 그렇지가 않죠?

앞부분에 선언을 따로 하고 정의부분은 분리해서 작성합니다.

 

이 때, 위 처럼'A' 라고 이름 붙인 함수가 선언 된다면 컴파일러는 A라는 식별자를 만나게 되면 제어권을 이동시킵니다.

함수가 정의된 곳으로 가서 그 함수를 실행하도록 컴퓨터에게 명령하죠. 그부분에 갈 때 인자Argument를 들고가죠.

그리고 정의부 중괄호{} 안에 있는 식을 모두 끝마치고 return 값이 있다면 return값도 가져오는 과정이 필요합니다.

중괄호{} 안에 있는 함수안에서 이루어지는 과정을 제외하고 보자구요, 저렇게 메모리에서 메모리로 데이터를 옮기는 과정들에 소모되는 시간이 아까운 경우가 있을 수 있습니다. 중괄호{} 안에서 실행되는 문장들이 아주 간단하고 연산량이 적은 경우라면 더욱 더 그럴 것입니다.

 

어떤 나라는 버스비가 공짜라고 가정하겠습니다.

집에서 10분거리에 버스 정류장이 있어서 직장에 출근할 때는 10분동안 걷고, 30분동안 버스를 타면 꽤 먼거리를 이동할 수가 있어서 합리적입니다.

 

그런데 헬스장에 갈때는 10분동안 걷고 버스를 3분동안만 타면 되는겁니다.

배보다 배꼽이 더 커지죠?

 

이럴때 헬스장행 노선 버스 정류장을 우리집앞으로 댕겨오게 되면 좋을겁니다.

실생활에 가장 근접하게 설명할 수 있는 비유가 대충 이거네요.

 

 

그럴때 사용하는것이 인라인 함수입니다.

1. 자주호출 해야 하고

2. 함수 본문이 짧고 연산이 간단하다

라면 인라인 함수로 만드는것을 고려해 볼 만 합니다.

inline void PrintValue(int x){cout << "변수의 값은 " << x << "다." << endl;}

이처럼 선언과 정의가 한꺼번에 이루어지게 합니다.

클래스 내부에서 함수 정의와 선언이 한꺼번에 이루어진다면 inline 키워드가 없어도 됩니다.

inline 키워드를 쓰지 않아도 컴파일러가 암묵적으로 인라인함수라고 간주하고 처리합니다.

 

C언어에서 배웠던 Register 변수와 비슷하게 인라인 함수도 컴파일러가 판단해서 결정하는 경우가 있습니다.

프로그래머가 강제로 명시하여 인라인함수로 선언했더라도 함수 내용이 길고 연산량이 많다고 판단되면 컴파일러가 인라인 함수로 처리하지 않습니다.

반대로 인라인 함수로 쓰지 않더라도 연산량이 적다면 인라인함수로 사용하기도 합니다.