in-line 함수의 의미부터 파악해 보자. in은 ' 내부 '를 의미하고, line은 ' 프로그
램 라인 ' 을 의미하는 거이다. 즉 의역 해보면 " in-line 함수" 란 프로그램 라인
안으로 들어가버린 함수라는 의미를 지닌다.
1] 매크로 함수의 정의와 장점
우리는 C 언어를 공부하면서 매크로에 대해서 알게 되었다. 여기서는 이에 관
련해서 잠깐 복습을 하기로 하자. 매크로를 이용하면 다양한 일을 할 수 있는
데 그 중에서도 가장 대표적인 일은 함수를 만드는 일이다. 다음은 매크로를 이
용해서 함수를 정의하고 이를 호출하는 형태를 보여준다. 일반적인 순서에 의
해서 전처리, 컴파일, 링크 과정을 거쳐서 실행 파일이 생성될 것이다.
#include <iostream>
#define SQUARE(X) ((X)*(X))
int main(void)
{
std::cout << SQUARE(5) << std::endl;
return 0;
}
그럼 위의 코드는 전처리 과정을 거치면서 어떻게 변하게 되는가? 다음 코드는
전처리 과정에 의해서 변경된 코드를 보여준다.
#include <iostream>
int main(void)
{
std::cout << ((5)*(5)) << std::endl;
return 0;
}
위의 두 코드를 통해서 알 수 있는 사실은 무엇인가? 그것은 함수를 매크로로
정의하면 전처리기에 의해서 함수 호출 문장이 함수의 몸체 부분으로 완전히
대치돼 버린다는 것이다. 그렇다면 이를 통해서 얻게 되는 이점은 무엇인가? 함
수 호출 과정이 사라졌기 때문에 성능상의 이점을 맛볼 수 있다.( 함수 호출은
스택 메모리 공간의 할당도 요구하며 시간도 많이 요구된다.)
위의 예제와 같이 함수 호출 문장이 함수의 몸체부분으로 완전히 대치되 버리
는 현상을 가리켜 " 함수가 inline화되었다." 라고 표현한다.
참고) 매크로 함수에 대해서는 장점뿐만 아니라 단점도 알고 있어야 한다. 단
점은 함수의 구현이 까다롭고 디버깅하기 어려우며, 구현하고자 하는 함수의
크기가 크다면 프로그램의 크기가 커지게 된다는 것이다. 보자 자세한 사항은
C 언어 관련 서적을 참조하기 바란다.
2] C++ 기반 함수의 in-line 화
앞에서 매크로를 이용해서 함수를 in-line화 하였다. 이처럼 매크로를 이용해
서 C++의 함수도 in-line화 할 수 있다. 그러나 보다 쉬운 방법이 있다. 다음 예
제 코드는 앞에서 본 예제를 C++ 스타일로 in-line화 하고 있다.
#include <iostream>
inline int SQUARE(int x)
{
return x*x;
}
int main(void)
{
std::cout << SQUARE(5) << std::endl;
return 0;
}
함수를 정의하는 과정에서 키워드 inline을 붙여준 것을 제외한다면 일반적인
함수와 다를 바가 없다. 그렇다면 여기서 붙여준 키워드 inline은 무엇을 의미하
는 것일까? 이는 함수 SQUARE를 inline화 하라는 의미이다.
정리하자! C++에서는 성능 향상을 목적으로 함수를 inline화 하기 위해서 매크
로를 사용할 필요가 없다. 다만 inline이라는 키워드만 붙여주면 되는 것이다.
얼마나 간편하고 좋은가?
참고) 매크로를 이용한 함수의 in-line화는 전처리기에 의해서 처리되지만, 키
워드 inline을 이용한 함수의 in-line화는 컴파일러에 의해서 처리된다. 또한 컴
파일러에 따라서는 inline 선언이 오히려 성능 향샹에 해가 된다고 판단될 경우,
그냥 무시해 버리기도 한다.
'프로그래밍 > C,C++' 카테고리의 다른 글
[C,C++] 디폴트(DeFault) 매개 변수 (0) | 2011.09.14 |
---|---|
[C,C++] 이름공간(namespace) (0) | 2011.09.14 |
[C,C++] 가변 인자란 ... (0) | 2011.08.28 |
[C,C++] getchar() 의 문제점.. (2) | 2011.08.28 |
[C,C++] scanf 와 fgets (0) | 2011.08.27 |