본문 바로가기
C++

[C++] C++ 함수

by codingbird1234 2024. 9. 25.

함수는 코드를 모듈화하고 재사용성을 높이는 중요한 개념입니다.

함수는 특정 작업을 수행하는 코드 블록으로, 한 번 정의해두면 여러 번 호출할 수 있습니다.

함수를 사용하면 코드의 가독성이 높아지고 유지보수가 쉬워집니다.

 

1. 함수의 기본 구조

  • 함수는 이름, 반환형, 매개변수, 함수 본체로 구성됩니다. 함수는 특정 작업을 수행하고, 필요하다면 값을 반환합니다.
반환형 함수이름(매개변수1, 매개변수2, ...) {
    // 함수가 수행할 코드
    return 반환값;  // 반환형이 void인 경우 생략 가능
}

 

  • 반환형: 함수가 어떤 자료형을 반환할지 명시합니다. 반환값이 없는 함수는 void를 반환형으로 사용합니다.
  • 함수이름: 함수의 이름으로, 호출할 때 사용됩니다.
  • 매개변수: 함수가 외부로부터 입력받을 값을 의미합니다. 여러 개의 매개변수를 사용할 수 있습니다.
  • 함수 본체: 함수가 실제로 수행하는 코드 블록입니다.

 

2. 함수의 정의와 호출

  • 함수는 정의한 후, 호출하여 실행합니다.
#include <iostream>

// 함수 정의
int add(int a, int b) {
    return a + b;
}

int main() {
    // 함수 호출
    int result = add(3, 5);  // 3과 5를 매개변수로 전달
    std::cout << "Result: " << result << std::endl;  // Result: 8
    return 0;
}

 

  • 두 정수를 입력받아서 더한 값(정수)을 반환하는 add 함수를 정의했습니다.
  • add(3, 5)의 반환값이 8이니, result는 8로 초기화됩니다.

* 초기화: 선언과 동시에 값을 저장하는 것

 

  • 참고로, 반환할 값이 없는 함수는 void로 선언합니다.
#include <iostream>

// 반환값이 없는 함수
void printHello() {
    std::cout << "Hello, World!" << std::endl;
}

int main() {
    printHello();  // 함수 호출
    return 0;
}
  • 위 코드의 printHello 함수는 출력문만 실행할 뿐, 어떤 값도 반환하지 않습니다.
  • 이런 경우에는 반환형을 void로 하면 됩니다.

 

3. 매개변수 전달 방식

매개변수를 값에 의한 전달(pass by value)참조에 의한 전달(pass by reference) 두 가지 방식으로 전달할 수 있습니다.

 

값에 의한 전달 (Pass by Value)

  • 함수에 인자로 전달된 값이 복사되어 함수 내부에서 사용됩니다.
  • 원래의 변수에는 영향을 미치지 않습니다.
#include <iostream>

void modifyValue(int x) {
    x = 10;  // x의 값만 변경되고, 호출자의 변수에는 영향을 미치지 않음
}

int main() {
    int a = 5;
    modifyValue(a);
    std::cout << "a is still: " << a << std::endl;  // a is still: 5
    return 0;
}

 

  • modifyValue 함수에서 x는 10으로 변했지만, main 함수의 a는 변하지 않습니다. 
  • 출력결과는 5입니다.

 

참조에 의한 전달 (Pass by Reference)

  • 함수에 인자로 전달된 변수를 직접 참조하여, 원래의 변수에 영향을 미칠 수 있습니다.
  • 참조에 의한 전달은 매개변수에 참조자(&)를 사용하여 구현됩니다.
#include <iostream>

void modifyValue(int& x) {
    x = 10;  // x는 원래 변수의 참조를 받으므로, 호출자의 변수에도 영향을 미침
}

int main() {
    int a = 5;
    modifyValue(a);
    std::cout << "a is now: " << a << std::endl;  // a is now: 10
    return 0;
}

 

  • 참조에 의한 전달로 인해, a의 값이 실제로 변경됩니다. a는 10으로 출력됩니다.

자세한 내용은, 추후에 준비해보겠습니다.

 

4. 기본값 매개변수 (Default Parameters)

함수의 매개변수에 기본값을 제공할 수 있습니다. 함수 호출 시 인자를 제공하지 않으면 기본값이 사용됩니다.

#include <iostream>

void greet(std::string name = "Guest") {
    std::cout << "Hello, " << name << "!" << std::endl;
}

int main() {
    greet();              // 기본값 사용: "Hello, Guest!"
    greet("John");        // "Hello, John!"
    return 0;
}
  • greet 함수를 처음 호출했을 때는 인자를 주지 않았기 때문에 기본값인 Guest가 사용되어 "Hello, Guest!"가 출력됩니다.
  • 두 번째 호출에서는 "John"이라는 인자를 주었기 때문에 "Hello, John!"이 출력됩니다.

 

5. 함수 오버로딩 (Function Overloading)

  • C++에서는 같은 이름의 함수지만 매개변수의 종류나 개수가 다른 함수를 정의할 수 있습니다. 이를 함수 오버로딩이라고 합니다.
#include <iostream>

// int 매개변수를 받는 함수
int add(int a, int b) {
    return a + b;
}

// double 매개변수를 받는 함수
double add(double a, double b) {
    return a + b;
}

int main() {
    std::cout << add(3, 5) << std::endl;        // int형 add 호출
    std::cout << add(2.5, 3.8) << std::endl;    // double형 add 호출
    return 0;
}
  • 첫 번째 add 함수 호출에서는 인자가 모두 정수이므로 int형 add 함수가 호출됩니다.
  • 두 번째 add 함수 호출에서는 인자가 모두 정수이므로 double형 add 함수가 호출됩니다.

'C++' 카테고리의 다른 글

[C++] C++ 제어문 - 반복문  (0) 2024.09.25
[C++] C++ 제어문 - 조건문  (0) 2024.09.24
[C++] C++ 기본 자료형(+문자열)  (0) 2024.09.24
[C++] C++ 입출력  (0) 2024.09.24