일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 티스토리챌린지
- pass by reference
- OOP
- Data Science
- baekjoon
- 파이썬
- 배열
- Deep Learning
- 오블완
- Class
- pointer
- vscode
- string
- function
- raw data
- 반복문
- programming
- assignment operator
- predictive analysis
- const
- 백준
- 포인터
- array
- Python
- Object Oriented Programming
- 함수
- 문자열
- C++
- Pre-processing
- 알고리즘
- Today
- Total
Channi Studies
[C++] 함수 프로토타입 (Function Prototype) & 디폴트 매개 변수 (Default Argument Values) 본문
[C++] 함수 프로토타입 (Function Prototype) & 디폴트 매개 변수 (Default Argument Values)
Chan Lee 2023. 12. 16. 20:43Prototype(프로토타입)
C++ 에서 함수를 선언할 때, 여러가지 편의성을 이유로 프로토타입을 선언합니다.
가장 큰 이유로는 함수 선언의 순서를 신경쓰지 않아도 되는 것과 문서의 가독성을 높이고 코드 구조를 개선하는 이유입니다.
프로토타입의 위치는 무조건 함수의 선언 이전에 있어야 합니다.
관례적으로는, 헤더 이후 프로토타입 선언을 하고, 메인 함수 이후에, 프로토타입으로 선언된 함수들의 선언을 합니다.
프로토타입의 형태는 다음과 같습니다.
// Function Prototypes
void say_hello();
// 함수 Argument가 없을 때
int add_nums(int, int);
int subt_nums(int n1, int n2);
// 함수 argument가 있을 때, 두 형태 모두 가능합니다
double calc_tax(double, double);
함수 전달 인자(argument)가 없을 때는 함수 선언할 때의 앞부분을 떼고 세미콜론(;)으로 마무리한 모습입니다.
argument가 있을 때에는, 두가지로 방법이 나뉘는데, 전달 변수명까지 기재하거나 안 하거나 입니다.
두 방법 모두 정상적으로 작동합니다.
이렇게만 하면 해당 함수가 무슨 기능을 하는지 모르기 때문에 문제가 있겠죠?
당연히 자세한 함수 선언은 이후에 다시 합니다.
void say_hello(){
cout << "Hello" << endl;
}
int add_nums(int n1, int n2){
return (n1 + n2);
}
int subt_nums(int n1, int n2){
return (n1 - n2);
}
double calc_tax(double base_cost, double tax){
return (base_cost += (base_cost * tax));
}
이 부분은 위에서 말씀드린것 처럼 메인 함수 이후에 나옵니다.
이 모든 것에 메인 함수까지 이어서 작성하면 다음과 같습니다.
// Function prototypes
#include <iostream>
using namespace std;
// PROTOTYPES
void say_hello();
// 함수 Argument가 없을 때
int add_nums(int, int);
int subt_nums(int n1, int n2);
// 함수 argument가 있을 때, 두 형태 모두 가능합니다
double calc_tax(double, double);
// MAIN
int main(){
say_hello();
cout << add_nums(10, 20) << endl;
cout << subt_nums(100,15) << endl;
calc_tax(100, 0.06) << endl;
}
// FUNCTION DEFINE
void say_hello(){
cout << "Hello" << endl;
}
int add_nums(int n1, int n2){
return (n1 + n2);
}
int subt_nums(int n1, int n2){
return (n1 - n2);
}
double calc_tax(double base_cost, double tax){
return (base_cost += (base_cost * tax));
}

Default Argument Values (디폴트 매개 변수)
위의 예시에서, 세금을 계산하는 함수인 calc_tax에 대해서 불편한 부분이 있습니다.
대부분의 이용객은 같은 퍼센트의 세금을 내고 있는데, 이용할 때 마다 일일히 0.06을 타이핑하기가 귀찮은겁니다.
이런 경우를 위해 default argument values를 지정할 수 있습니다.
이를 지정하면, 컴파일러에게 매개 변수가 주어지지 않았을 때 어떤 값으로 함수를 실행할 지를 지정할 수 있습니다.
가장 좋은 방법은 프로토타입에서 지정하는 것입니다.
이는 일관성과 유지보수의 측면에서 더욱 편리합니다.
또한, 디폴트 값을 지정할 때, 하나만 가능한 것이 아니라 여러 매개 변수에 대해서도 가능합니다.
디폴트 값을 설정하는 방법은 매우 간단합니다.
// Prototype
double calc_tax(double base_cost, double tax_rate = 0.06);
프로토타입을 선언할 때, 변수명까지 기재한 뒤, 값까지 할당하면 다입니다.
이제 코드로 한번 살펴보겠습니다.
// Function prototypes & Default variable values
#include <iostream>
using namespace std;
// PROTOTYPES
double calc_tax(double base_cost, double tax_rate = 0.06);
// MAIN
int main() {
cout << "$100 with tax rate of 6\% is: " << calc_tax(100) << endl;
cout << "$100 with tax rate of 6\% is: " << calc_tax(100, 0.06) << endl;
cout << "$100 with tax rate of 30\% is: " << calc_tax(100, 0.3) << endl;
return 0;
}
// FUNCTION DEFINE
double calc_tax(double base_cost, double tax) {
return (base_cost += (base_cost * tax));
}
위에서 설명한 대로 프로토타입 선언 시에 default value를 지정했습니다.
이후는 기존과 동일하지만, 메인 함수에서 calc_tax 함수를 사용할 때 세금 퍼센트를 입력하지 않아도 문제 없이 출력됩니다.

'C++ > 함수 (Function)' 카테고리의 다른 글
[C++] 함수에서 포인터를 반환하기 (Returning a Pointer from a Function) (1) | 2023.12.22 |
---|---|
[C++] 재귀 함수 (Recursive Function) (0) | 2023.12.18 |
[C++] 참조로 전달하기 (Pass by Reference) (1) | 2023.12.17 |
[C++] 함수에 배열을 매개변수로 사용할 때 (Passing Arrays To Functions) (3) | 2023.12.17 |
[C++] 함수 오버로딩 (Function Overloading) (1) | 2023.12.17 |