
C++에서 함수는 코드의 재사용성과 가독성을 높이는 핵심 구성 요소다. 이번 글에서는 C++ 함수의 기초 개념부터 고급 개념인 람다 함수와 정적 다형성까지 정리해본다.
함수(Function)는 특정 작업을 수행하는 명령문의 집합이다. C++에서는 크게 두 가지 함수가 있다.
sort(), sqrt() 등)C++ 함수는 다음과 같은 형식으로 정의된다.
반환형 함수이름(매개변수 목록) {
// 함수 본문
}
예시:
#include <iostream>
int addNumbers(int a, int b) {
return a + b;
}
int main() {
int result = addNumbers(3, 7);
std::cout << "결과: " << result << '\n';
return 0;
}
함수를 미리 선언해서 나중에 정의할 수 있다. 이를 함수 프로토타입이라 부른다.
#include <iostream>
int multiply(int x, int y); // 함수 프로토타입
int main() {
std::cout << multiply(4, 5) << '\n';
return 0;
}
int multiply(int x, int y) {
return x * y;
}
람다 함수는 이름 없이 정의되는 익명 함수로, 특히 STL과 함께 사용할 때 유용하다.
기본 문법
[capture](parameter) -> return_type {
// body
};
사용 예시
auto sayHi = []() {
std::cout << "Hello, World!\n";
};
sayHi();
auto add = [](int a, int b) {
return a + b;
};
std::cout << add(2, 3); // 5
int x = 5;
auto multiply = [x](int a) {
return a * x;
};
std::cout << multiply(3); // 15
int counter = 0;
auto increment = [&counter]() {
counter++;
};
increment();
std::cout << counter; // 1
함수 이름은 같지만 매개변수의 타입이나 수가 다르면 여러 함수 정의 가능하다.
void print(int i) {
std::cout << "int: " << i << '\n';
}
void print(double d) {
std::cout << "double: " << d << '\n';
}
void print(const char* s) {
std::cout << "string: " << s << '\n';
}
정적 다형성은 컴파일 타임에 어떤 함수를 호출할지 결정하는 다형성이다. 대표적인 방법은 함수 오버로딩과 템플릿이다.
템플릿 함수 예시
template<typename T>
void print(const T& value) {
std::cout << "value: " << value << '\n';
}
int main() {
print(10); // int
print(3.14); // double
print("hello"); // const char*
}
C++ 함수는 단순한 계산부터 고급 제네릭 프로그래밍까지 다양한 분야에 활용된다. 함수 개념을 잘 익히는 것은 C++ 실력 향상의 지름길이다.