C++ 함수 완전 정복: 함수 정의부터 람다, 오버로딩, 정적 다형성까지

gigyesik·2025년 6월 17일

developer-roadmap-c++

목록 보기
5/20

썸네일

C++ 함수 완전 정복: 함수 정의부터 람다, 오버로딩, 정적 다형성까지

C++에서 함수는 코드의 재사용성과 가독성을 높이는 핵심 구성 요소다. 이번 글에서는 C++ 함수의 기초 개념부터 고급 개념인 람다 함수와 정적 다형성까지 정리해본다.


📌 함수란?

함수(Function)는 특정 작업을 수행하는 명령문의 집합이다. C++에서는 크게 두 가지 함수가 있다.

  • 표준 라이브러리 함수: 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;
}

✅ 람다 함수 (Lambda Functions)

람다 함수는 이름 없이 정의되는 익명 함수로, 특히 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

✅ 함수 오버로딩 (Function Overloading)

함수 이름은 같지만 매개변수의 타입이나 수가 다르면 여러 함수 정의 가능하다.

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';
}

✅ 정적 다형성 (Static Polymorphism)

정적 다형성은 컴파일 타임에 어떤 함수를 호출할지 결정하는 다형성이다. 대표적인 방법은 함수 오버로딩과 템플릿이다.

템플릿 함수 예시

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++ 실력 향상의 지름길이다.

profile
Server Dev

0개의 댓글