inline 함수
inline
함수는 함수 호출의 오버헤드를 줄이기 위해 컴파일러에게 함수의 코드를 호출 위치에 삽입하도록 요청하는 방법입니다. 이 방법은 특히 자주 호출되는 작은 함수에서 유용합니다.
inline 함수의 사용법
inline
키워드를 사용하여 함수를 선언합니다.
inline int add(int a, int b) {
return a + b;
}
컴파일러는 inline
함수가 호출될 때마다 실제 함수 호출 대신 함수 본문을 호출 위치에 삽입합니다.
예제 코드
#include <iostream>
inline int add(int a, int b) {
return a + b;
}
int main() {
int result = add(3, 4);
std::cout << "Result: " << result << std::endl;
return 0;
}
위 코드에서 add
함수는 inline
함수로 선언되어, 함수 호출 시 실제 호출 대신 함수 본문이 삽입됩니다.
매크로
매크로는 전처리기 지시문을 사용하여 코드 조각을 정의하는 방법입니다. 매크로는 주로 반복적인 코드나 상수 값을 정의할 때 사용됩니다.
매크로의 사용법
#define
지시문을 사용하여 매크로를 정의합니다.
#define ADD(a, b) ((a) + (b))
매크로는 컴파일 전에 전처리기에 의해 코드에 삽입됩니다. 매크로를 사용할 때는 괄호를 사용하여 연산자 우선순위를 명확히 하는 것이 좋습니다.
예제 코드
#include <iostream>
#define ADD(a, b) ((a) + (b))
int main() {
int result = ADD(3, 4);
std::cout << "Result: " << result << std::endl;
return 0;
}
위 코드에서 ADD
매크로는 함수 호출처럼 사용되지만, 실제로는 전처리기에 의해 코드가 삽입됩니다.
inline 함수 vs 매크로
inline
함수와 매크로는 함수 호출의 오버헤드를 줄이는 데 유용하지만, 다음과 같은 차이점이 있습니다.
- 타입 검사:
inline
함수는 타입 검사를 수행하지만, 매크로는 수행하지 않습니다. - 디버깅:
inline
함수는 디버깅 시 함수 호출로 표시되지만, 매크로는 원본 코드로 표시되지 않습니다. - 유연성:
inline
함수는 더 복잡한 로직을 포함할 수 있으며, 매크로는 단순한 코드 조각에 적합합니다.
실습 문제
문제 1: inline 함수와 매크로 사용하기
다음 코드에서 add
매크로를 inline
함수로 변환하고, 각 방법의 장단점을 비교하세요.
main.cpp
#include <iostream>
#define ADD(a, b) ((a) + (b))
int main() {
int result = ADD(3, 4);
std::cout << "Result: " << result << std::endl;
return 0;
}
해답:
main.cpp (inline 함수로 변환)
#include <iostream>
inline int add(int a, int b) {
return a + b;
}
int main() {
int result = add(3, 4);
std::cout << "Result: " << result << std::endl;
return 0;
}
장단점 비교
매크로의 장점
- 단순한 코드 조각을 반복적으로 삽입하는 데 유용합니다.
- 컴파일 전에 전처리기에 의해 치환되므로 성능 오버헤드가 없습니다.
매크로의 단점
- 타입 검사가 이루어지지 않습니다.
- 디버깅이 어렵습니다.
- 연산자 우선순위 문제로 인해 예기치 않은 결과가 발생할 수 있습니다.
inline 함수의 장점
- 타입 검사가 이루어집니다.
- 디버깅이 용이합니다.
- 복잡한 로직을 포함할 수 있습니다.
inline 함수의 단점
- 매우 작은 함수가 아닌 경우 컴파일러가
inline
요청을 무시할 수 있습니다. - 모든 컴파일러가
inline
요청을 동일하게 처리하지 않습니다.
이제 열 번째 날의 학습을 마쳤습니다. inline 함수와 매크로의 사용법과 각 방법의 장단점을 이해하고, 실습 문제를 통해 이를 적용하는 방법을 학습했습니다.
질문이나 피드백이 있으면 언제든지 댓글로 남겨 주세요. 내일은 "표현식 템플릿 (Expression Templates)"에 대해 학습하겠습니다.
'-----ETC----- > C++ 성능 최적화 및 고급 테크닉 시리즈' 카테고리의 다른 글
[C++ 성능 최적화 및 고급 테크닉] Day 11: 표현식 템플릿 (Expression Templates) (0) | 2024.08.01 |
---|---|
[C++ 성능 최적화 및 고급 테크닉] Day 9: 완벽한 전달 (Perfect Forwarding) (0) | 2024.08.01 |
[C++ 성능 최적화 및 고급 테크닉] Day 7: 데이터 로컬리티와 캐시 친화적 코딩 (0) | 2024.08.01 |
[C++ 성능 최적화 및 고급 테크닉] Day 8: Move semantics와 R-값 참조 (0) | 2024.08.01 |
[C++ 성능 최적화 및 고급 테크닉] Day 5: 메모리 관리 최적화 (0) | 2024.08.01 |