Skip to Content
💻 코리아IT아카데미 신촌 - 프로그래밍 학습 자료
C++ 프로그래밍Unit 5: 함수 기초Topic 2: 매개변수와 반환값

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. 다음 중 반환값을 사용해야 하는 경우는?

  1. 단순히 값을 출력하는 함수
  2. 두 수의 합을 구하는 함수
  3. 환영 메시지를 출력하는 함수
  4. 구구단을 출력하는 함수

💡 정답 확인

정답: 2번 - 두 수의 합을 구하는 함수

계산 결과를 호출한 곳에서 사용해야 하므로 반환값이 필요합니다.

int sum(int a, int b) { return a + b; // 결과를 반환 }

Q2. 여러 개의 결과가 필요할 때 가장 좋은 방법은?

  1. return 문을 여러 번 사용한다
  2. 각각의 결과를 위한 함수를 만든다
  3. 전역 변수를 사용한다
  4. 하나의 함수에서 모든 걸 계산한다

💡 정답 확인

정답: 2번 - 각각의 결과를 위한 함수를 만든다

함수는 한 가지 일만 하는 것이 좋습니다. 각각의 계산을 위한 별도의 함수를 만들면:

  • 코드가 명확해짐
  • 재사용이 쉬움
  • 오류 찾기가 간단함

🏆 연습 문제

다음 함수들을 만들어보세요:

  1. 🧮 계산 함수: 두 수의 곱셈과 나눗셈 함수 만들기
  2. 🔢 평균 함수: 세 수의 평균을 계산해서 반환하는 함수
  3. 📊 통계 함수: 세 수 중 가장 큰 값을 찾는 함수
  4. ✨ 보너스: 이름과 점수를 받아서 등급(A,B,C,D,F)을 반환하는 함수

힌트:

  • 계산 결과가 필요하면 → 반환값 사용
  • 여러 결과가 필요하면 → 각각의 함수 만들기
  • 함수는 한 가지 일만 → 명확하고 간단하게
Last updated on