Topic 2: 매개변수와 반환값 📦
🎯 학습 목표
- 함수의 매개변수 종류와 사용법을 이해할 수 있다
- 반환값의 개념과 활용 방법을 익힐 수 있다
- 효율적인 함수 설계 원칙을 적용할 수 있다
🌟 함수의 입력과 출력
“함수는 요리사와 같아요. 재료(매개변수)를 받아서 맛있는 요리(반환값)를 만들어내죠!”
함수의 진짜 힘은 데이터를 받고, 처리하고, 결과를 돌려주는 것에 있습니다. 마치 자동판매기처럼 말이에요!
🏪 자동판매기 비유:
- 동전(매개변수) 투입 → 음료수(반환값) 출력
- 버튼 선택(매개변수) → 해당 음료(반환값) 제공
- 잘못된 입력(잘못된 매개변수) → 오류 메시지(예외 처리)
📨 매개변수(Parameter): 함수의 입력
1. 기본적인 매개변수
#include <iostream>
using namespace std;
// 기본 매개변수 - 값 전달 방식
void greetPerson(string name, int age) {
cout << "안녕하세요, " << name << "님!" << endl;
cout << "나이가 " << age << "살이시군요!" << endl;
}
// 계산하는 함수
int calculateArea(int width, int height) {
return width * height; // 면적 계산 후 반환
}
int main() {
// 함수 호출 - 매개변수 전달
greetPerson("김철수", 20);
int area = calculateArea(10, 5);
cout << "면적: " << area << endl;
return 0;
}
출력:
안녕하세요, 김철수님!
나이가 20살이시군요!
면적: 50
2. 🎁 매개변수 전달 방식의 이해
📦 값 전달 (복사본 전달)
개념: 함수에 값의 복사본을 전달하므로 원본은 변경되지 않음
void printDouble(int x) {
x = x * 2; // 복사본만 변경
cout << "함수 내부: " << x << endl;
}
int main() {
int number = 5;
cout << "원본: " << number << endl; // 5
printDouble(number);
cout << "함수 호출 후: " << number << endl; // 여전히 5!
return 0;
}
🔄 값을 변경하려면?
함수가 계산한 결과를 반환받아서 사용하세요!
int doubleValue(int x) { // 값을 받아서
return x * 2; // 계산 결과를 반환
}
int main() {
int number = 5;
cout << "원본: " << number << endl; // 5
number = doubleValue(number); // 반환값으로 업데이트
cout << "변경된 값: " << number << endl; // 10!
return 0;
}
3. 🎯 매개변수 활용 팁
📊 함수 설계 원칙
목적 | 방법 | 예시 |
---|---|---|
값 읽기 | 매개변수로 전달 | 출력, 계산 |
값 변경 | 반환값 활용 | 계산 결과 반환 |
여러 결과 | 여러 함수 호출 | 각각 다른 함수로 |
💼 실전 예제
// 값 전달 - 단순 출력
void showInfo(string name, int age) {
cout << name << "님, " << age << "세" << endl;
}
// 반환값 활용 - 값 변경
int increaseAge(int age) {
return age + 1; // 나이 1살 증가한 값을 반환
}
int main() {
string myName = "김철수";
int myAge = 20;
showInfo(myName, myAge); // 정보 출력: 김철수님, 20세
myAge = increaseAge(myAge); // 반환값으로 나이 업데이트
cout << "생일 축하! 이제 " << myAge << "세입니다." << endl;
showInfo(myName, myAge); // 변경된 정보: 김철수님, 21세
return 0;
}
🎁 반환값(Return Value): 함수의 출력
1. 기본 반환값
// 정수 반환
int add(int a, int b) {
return a + b; // 계산 결과를 반환
}
// 실수 반환
double calculateAverage(int sum, int count) {
return (double)sum / count; // 평균값 반환
}
// 문자열 반환
string createGreeting(string name) {
return "안녕하세요, " + name + "님!";
}
// 불린 반환
bool isEven(int number) {
return number % 2 == 0; // 짝수면 true, 홀수면 false
}
int main() {
int result = add(5, 3);
cout << "덧셈 결과: " << result << endl;
double avg = calculateAverage(100, 3);
cout << "평균: " << avg << endl;
string greeting = createGreeting("박민수");
cout << greeting << endl;
bool evenCheck = isEven(10);
cout << "10은 짝수인가? " << (evenCheck ? "네" : "아니오") << endl;
return 0;
}
2. 🎁 여러 계산을 한번에!
📋 각각의 함수로 여러 결과 얻기
여러 개의 계산이 필요하면 각각의 함수를 만들어요!
// 몫을 구하는 함수
int getQuotient(int a, int b) {
return a / b; // 몫 반환
}
// 나머지를 구하는 함수
int getRemainder(int a, int b) {
return a % b; // 나머지 반환
}
int main() {
int q = getQuotient(17, 5); // 몫 구하기
int r = getRemainder(17, 5); // 나머지 구하기
cout << "17 ÷ 5 = " << q << " 나머지 " << r << endl;
// 출력: 17 ÷ 5 = 3 나머지 2
return 0;
}
🔍 최댓값과 최솟값 찾기
// 세 수 중 최솟값 찾기
int findMin(int a, int b, int c) {
int minVal = a; // 첫 번째 값으로 시작
if (b < minVal) minVal = b;
if (c < minVal) minVal = c;
return minVal;
}
// 세 수 중 최댓값 찾기
int findMax(int a, int b, int c) {
int maxVal = a; // 첫 번째 값으로 시작
if (b > maxVal) maxVal = b;
if (c > maxVal) maxVal = c;
return maxVal;
}
int main() {
int min = findMin(10, 3, 7);
int max = findMax(10, 3, 7);
cout << "최솟값: " << min << endl; // 3
cout << "최댓값: " << max << endl; // 10
return 0;
}
🎮 미니 프로젝트: 기본 계산기
함수의 힘을 보여주는 간단한 계산기 만들기!
#include <iostream>
using namespace std;
// 🧮 계산 함수들
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int multiply(int a, int b) {
return a * b;
}
// 🎯 메인 함수
int main() {
int num1, num2;
char operation;
cout << "첫 번째 숫자: ";
cin >> num1;
cout << "연산자 (+, -, *): ";
cin >> operation;
cout << "두 번째 숫자: ";
cin >> num2;
// 연산 수행
int result;
if (operation == '+') {
result = add(num1, num2);
} else if (operation == '-') {
result = subtract(num1, num2);
} else if (operation == '*') {
result = multiply(num1, num2);
}
cout << num1 << " " << operation << " " << num2 << " = " << result << endl;
return 0;
}
🌟 이렇게 함수를 사용하면:
- 각 연산이 명확히 구분됨
- 코드를 읽기 쉬움
- 오류 찾기가 간단함
- 새로운 연산 추가가 쉬움
💡 좋은 함수 만들기 팁
1. 🎯 한 가지 일만 하기
❌ 나쁜 예: 너무 많은 일을 한꺼번에
void messyFunction(int score) {
cout << "점수: " << score << endl; // 출력
score = score + 10; // 점수 변경
if (score > 100) score = 100; // 검사
// 너무 복잡해요!
}
✅ 좋은 예: 각각 다른 함수로 분리
void printScore(int score) {
cout << "점수: " << score << endl; // 출력만
}
int addBonus(int score, int bonus) {
return score + bonus; // 계산만
}
int limitScore(int score) {
if (score > 100) return 100; // 검사만
return score;
}
2. 📝 의미 있는 함수 이름 짓기
// ❌ 나쁜 이름들
void func1(int x) { } // 뭘 하는지 모름
void process(int a) { } // 애매함
// ✅ 좋은 이름들
void printWelcome() { } // 환영 메시지 출력
int calculateSum(int a, int b) { } // 합계 계산
bool isEven(int number) { } // 짝수 판별
3. 🎪 기본값 활용하기
// 기본값으로 함수 사용을 편리하게!
void greet(string name, string message = "안녕하세요") {
cout << message << ", " << name << "님!" << endl;
}
int main() {
greet("철수"); // "안녕하세요, 철수님!"
greet("영희", "반갑습니다"); // "반갑습니다, 영희님!"
return 0;
}
💭 생각해보기: 함수 설계 퀴즈
Q1. 다음 중 반환값을 사용해야 하는 경우는?
- 단순히 값을 출력하는 함수
- 두 수의 합을 구하는 함수
- 환영 메시지를 출력하는 함수
- 구구단을 출력하는 함수
💡 정답 확인
정답: 2번 - 두 수의 합을 구하는 함수
계산 결과를 호출한 곳에서 사용해야 하므로 반환값이 필요합니다.
int sum(int a, int b) {
return a + b; // 결과를 반환
}
Q2. 여러 개의 결과가 필요할 때 가장 좋은 방법은?
- return 문을 여러 번 사용한다
- 각각의 결과를 위한 함수를 만든다
- 전역 변수를 사용한다
- 하나의 함수에서 모든 걸 계산한다
💡 정답 확인
정답: 2번 - 각각의 결과를 위한 함수를 만든다
함수는 한 가지 일만 하는 것이 좋습니다. 각각의 계산을 위한 별도의 함수를 만들면:
- 코드가 명확해짐
- 재사용이 쉬움
- 오류 찾기가 간단함
🏆 연습 문제
다음 함수들을 만들어보세요:
- 🧮 계산 함수: 두 수의 곱셈과 나눗셈 함수 만들기
- 🔢 평균 함수: 세 수의 평균을 계산해서 반환하는 함수
- 📊 통계 함수: 세 수 중 가장 큰 값을 찾는 함수
- ✨ 보너스: 이름과 점수를 받아서 등급(A,B,C,D,F)을 반환하는 함수
힌트:
- 계산 결과가 필요하면 → 반환값 사용
- 여러 결과가 필요하면 → 각각의 함수 만들기
- 함수는 한 가지 일만 → 명확하고 간단하게
Last updated on