inline 함수는 함수를 호출하는게 아니라 마치 #define macro 와 같이 치환되어 함수 호출에 대한 overhead 를 줄일 수 있어 좀 더 빠른 처리가 가능하다.
하지만 inline 함수는 사용자가 지정한다고 해서 inline 함수가 되는 것이 아니라 사용자가 compiler 에게 inline 함수로 사용하겠다는 신청을 하면 compiler 가 inline 함수의 조건에 맞으면 inline 함수로 처리하고 아니면 일반 함수로 처리하게 된다.
inline 함수의 조건이란 7 line 이하이어야 하고, 재귀 호출과 같은 반복되는 함수는 제외된다.
함수를 inline 함수로 신청하기 위해서는
- 함수의 선언과 동시에 정의를 한다. ( inline keyword 를 붙이지 않아도 된다. )
- 함수의 선언 앞에 inline keyword 를 붙인다. 단, 함수의 정의는 선언부와 같은 file 안에 있어야 한다.
그러므로 inline 함수는 cpp file ( *.cpp ) 에 정의할 수 없는 것이다.
위의 사항으로 비추어 보면 선언과 정의가 같은 file 안에 있어야 하므로 선언과 정의를 분리하기 어려워진다.
그래서 등장한 기법이 inl file ( *.inl ) 이다.
inl file 에는 inline 함수의 정의부를 적어 놓고 선언부가 있는 header file ( *.h ) 의 끝에서 #include 로 inl file 을 포함해 주면 된다.
단, 여기서 주의할 점은 선언과 동시에 정의를 했을 경우에는 inline keyword 를 붙이지 않아도 되지만, 그렇지 않으므로 꼭 inline keyword 를 붙여야 한다.
inl file 이 또 하나 유용한 점이 있는데 바로 template 을 작성할 때이다.
template 또한 inline 함수와 마찬가지로 선언과 정의가 같은 file 에 있어야 한다.
그러므로 template 의 선언은 header file 에 작성하고, 정의는 inl file 에 하면 선언과 정의를 분리할 수 있게 된다.