C++ 프로그래밍에서 인라인(inline) 함수와 매크로(macro)는 모두 함수 호출 오버헤드를 줄여 실행 속도를 높이기 위해 사용되지만, 처리 방식과 동작 특성에서 큰 차이가 있습니다. 이 글에서는 두 개념의 차이점을 항목별로 자세히 살펴보겠습니다.
인라인(Inline) 함수란?
- C++의 실제 함수입니다.
- 컴파일러에 의해 해석(parsing)됩니다.
- 클래스 내부 또는 외부 어디서든 정의할 수 있습니다.
- 인자를 단 한 번만 평가합니다.
- 컴파일러가 모든 함수를 인라인으로 변환하고 확장하는 것은 아닙니다.
- 클래스 내부에 정의된 짧은 함수는 자동으로 인라인 함수가 됩니다.
- 클래스 내부에 정의된 인라인 함수는 해당 클래스의 데이터 멤버에 접근할 수 있습니다.
- 중괄호({ })를 사용하여 함수 본문을 종료합니다.
- 디버깅이 쉽습니다.
- 컴파일 시점에 오류 검사가 수행되기 때문입니다.
- 함수 본문의 모든 문장을 하나로 묶어(bind) 처리합니다.
예제 코드
inline return_type funct_name ( parameters ) {
. . .
}
매크로(Macro)란?
- 전처리기(preprocessor)에 의해 확장됩니다.
- 프로그램의 시작 부분에서 정의됩니다.
- 코드 내에서 사용될 때마다 인자를 매번 평가합니다.
- 항상 확장됩니다.
- 반드시 명시적으로 정의해야 합니다.
- 클래스의 멤버가 될 수 없습니다.
- 클래스의 데이터 멤버에 접근할 수 없습니다.
- 매크로 정의는 새 줄(개행 문자)에서 끝납니다.
- 컴파일 시점에 오류 검사가 이루어지지 않아 디버깅이 어렵습니다.
- 종료 기호가 없기 때문에 두 개 이상의 문장을 포함하면 바인딩(binding) 문제가 발생할 수 있습니다.
예제 코드
#define macro_name char_sequence
핵심 차이점 요약
| 구분 | 인라인 함수 | 매크로 |
|---|---|---|
| 처리 주체 | 컴파일러 | 전처리기 |
| 타입 검사 | 수행됨 | 수행되지 않음 |
| 인자 평가 | 한 번만 평가 | 사용될 때마다 평가 |
| 클래스 멤버 접근 | 가능 | 불가능 |
| 종료 방식 | 중괄호 { } | 개행 문자 |
| 디버깅 | 쉬움 | 어려움 |
결론적으로, 타입 안정성과 디버깅 편의성이 중요한 현대 C++ 개발에서는 매크로보다 인라인 함수를 사용하는 것이 권장됩니다. 매크로는 상수 정의나 조건부 컴파일 등 제한적인 용도로 활용하는 것이 좋습니다.