본문 바로가기
-----ETC-----/C++ 성능 최적화 및 고급 테크닉 시리즈

[C++ 성능 최적화 및 고급 테크닉] Day 10: inline 함수와 매크로의 사용

by cogito21_cpp 2024. 8. 1.
반응형

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)"에 대해 학습하겠습니다.

반응형