C++ 초급 - 4. 함수와 변수의 범위 (Functions and Variable Scope) (3 - 기본 매개변수 (Default Arguments))
2025. 2. 12. 18:14ㆍ프로그래밍 언어/C++
📌 4.3 기본 매개변수 (Default Arguments)
기본 매개변수(Default Arguments)는 함수의 매개변수에 기본값을 설정하는 기능이다.
함수를 호출할 때 특정 매개변수를 생략하면 기본값이 자동으로 적용된다.
이 기능을 활용하면 코드를 간결하게 작성하고, 불필요한 함수 오버로딩을 줄일 수 있다.
📌 1. 기본 매개변수의 정의 및 사용법
🔹 기본 매개변수 선언 방식
반환타입 함수이름(매개변수 = 기본값);
💡 예제: 기본 매개변수 설정
#include <iostream>
// 함수 선언 (기본 매개변수 사용)
void greet(std::string name = "손님") {
std::cout << "안녕하세요, " << name << "님!" << std::endl;
}
int main() {
greet("홍길동"); // 매개변수 전달 → "홍길동" 사용
greet(); // 매개변수 생략 → 기본값 "손님" 사용
return 0;
}
🔹 출력 결과
안녕하세요, 홍길동님!
안녕하세요, 손님님!
💡 매개변수를 생략하면 기본값이 자동으로 적용됨.
📌 2. 기본값이 설정된 매개변수의 우선순위
- 기본 매개변수는 반드시 함수 선언(프로토타입)에서 설정해야 함.
- 기본 매개변수는 우측에서부터 차례로 설정해야 함.
- 즉, 기본값이 설정된 매개변수 다음에 기본값이 없는 매개변수를 둘 수 없음.
💡 예제: 기본값의 우선순위
#include <iostream>
// 함수 선언 (기본값 설정)
void printMessage(std::string message, int repeat = 1) {
for (int i = 0; i < repeat; i++) {
std::cout << message << std::endl;
}
}
int main() {
printMessage("Hello!"); // 기본값 사용 (1번 출력)
printMessage("Welcome!", 3); // repeat 값 전달 (3번 출력)
return 0;
}
🔹 출력 결과
Hello!
Welcome!
Welcome!
Welcome!
💡 설명
- 첫 번째 호출: repeat을 생략했으므로 기본값 1 적용.
- 두 번째 호출: repeat = 3 전달.
📌 3. 기본 매개변수 설정 시 주의할 점
- 기본값은 마지막 매개변수부터 설정해야 함.
void test(int a = 10, int b); // ❌ 오류 발생: 기본 매개변수는 오른쪽에서 왼쪽 순서로 설정해야 함.
- 기본값이 있는 매개변수와 없는 매개변수를 섞을 경우, 기본값 있는 매개변수를 뒤에 둬야 함.
void test(int a, int b = 10); // ✅ 올바른 선언
📌 4. 오버로딩과 기본 매개변수의 차이점
기본 매개변수(Default Arguments)와 함수 오버로딩(Function Overloading)은 비슷하지만, 차이가 있다.
비교 항목 | 기본 매개변수 | 함수 오버로딩 |
코드 길이 | 간결함 | 코드가 길어짐 |
사용 방식 | 매개변수 생략 가능 | 같은 이름의 여러 함수 정의 |
유연성 | 일부 매개변수만 기본값 설정 가능 | 타입 또는 개수에 따라 다르게 동작 가능 |
충돌 가능성 | 기본 매개변수와 오버로딩을 혼용할 경우 충돌 가능 | 매개변수 타입과 개수가 다르면 명확히 구분됨 |
💡 기본 매개변수와 오버로딩 비교 예제
#include <iostream>
// 기본 매개변수 사용
void display(int a, int b = 10) {
std::cout << "기본 매개변수: " << a << ", " << b << std::endl;
}
// 함수 오버로딩 사용
void display(int a) {
std::cout << "오버로딩: " << a << std::endl;
}
int main() {
display(5); // display(int) 오버로딩 호출
display(5, 20); // 기본 매개변수 사용
return 0;
}
🔹 출력 결과
오버로딩: 5
기본 매개변수: 5, 20
💡 설명
- display(5); 호출 시, 기본 매개변수를 사용하지 않고 오버로딩된 함수가 호출됨.
- 오버로딩과 기본 매개변수를 혼용할 경우 컴파일러가 어떤 함수를 호출할지 모호해질 수 있음.
📌 5. C++ 표준 라이브러리에서의 활용 예시
C++ 표준 라이브러리에서는 기본 매개변수를 활용하여 유연한 함수 제공이 가능하다.
🔹 1. std::fill (배열 초기화)
#include <iostream>
#include <algorithm> // std::fill 사용
int main() {
int arr[5];
// 배열을 0으로 채우기 (기본 매개변수 사용)
std::fill(arr, arr + 5, 0);
for (int num : arr) {
std::cout << num << " ";
}
return 0;
}
🔹 출력 결과
0 0 0 0 0
💡 설명
- std::fill의 기본 매개변수로 배열을 특정 값으로 초기화할 수 있다.
🔹 2. std::sort (정렬)
#include <iostream>
#include <algorithm> // std::sort 사용
int main() {
int arr[] = {5, 3, 9, 1, 4};
// 기본 매개변수를 이용한 오름차순 정렬 (기본적으로 less<T>() 사용)
std::sort(arr, arr + 5);
for (int num : arr) {
std::cout << num << " ";
}
return 0;
}
🔹 출력 결과
1 3 4 5 9
💡 설명
- std::sort의 기본 매개변수는 std::less<T>()이므로 기본적으로 오름차순 정렬됨.
📌 6. 정리
개념 | 설명 |
기본 매개변수 | 함수의 매개변수에 기본값을 설정 |
설정 위치 | 기본값이 있는 매개변수는 오른쪽에서 왼쪽 순서로 설정해야 함 |
오버로딩과 차이점 | 기본 매개변수는 코드를 간결하게, 오버로딩은 유연하게 |
주의점 | 오버로딩과 기본 매개변수를 혼용하면 충돌 가능성 있음 |
활용 예시 | std::fill, std::sort 등 표준 라이브러리에서 활용 |