Skip to Content
💻 코리아IT아카데미 신촌 - 프로그래밍 학습 자료

Topic 2: 매개변수와 인수 - 함수에 정보 전달하기 📬

🎯 학습 목표

매개변수와 인수의 개념을 이해하고, 함수에 다양한 방법으로 데이터를 전달하여 더욱 유연하고 강력한 함수를 만들 수 있습니다.

🤔 매개변수와 인수란?

일상 속 매개변수와 인수

배달 음식 주문을 생각해보세요:

배달_주문하기(음식="치킨", 개수=2, 주소="서울시 강남구"): 1. 음식 종류 확인: 치킨 2. 개수 확인: 2개 3. 주소 확인: 서울시 강남구 4. 주문 완료!
  • 매개변수(Parameter): 음식, 개수, 주소 (함수가 받을 정보의 이름)
  • 인수(Argument): “치킨”, 2, “서울시 강남구” (실제로 전달하는 값)

프로그래밍에서의 매개변수와 인수

def greet(name): # name: 매개변수 print(f"안녕하세요, {name}님!") greet("민지") # "민지": 인수

매개변수와 인수의 차이점:

  • 매개변수: 함수 정의할 때 괄호 안에 쓰는 변수 이름
  • 인수: 함수 호출할 때 실제로 전달하는 값

📚 실생활 예제: 개인화된 학급 관리

예제 1: 개인화된 학생 인사

문제 상황: 각 학생마다 다른 이름으로 인사해야 합니다.

매개변수 없는 함수 (한계):

def greet_minji(): print("안녕하세요, 김민지님!") print("오늘도 좋은 하루 되세요!") def greet_junho(): print("안녕하세요, 이준호님!") print("오늘도 좋은 하루 되세요!") # 학생마다 함수를 따로 만들어야 함...

매개변수를 사용한 개선:

def greet_student(name): """학생에게 개인화된 인사를 하는 함수""" print(f"안녕하세요, {name}님!") print("오늘도 좋은 하루 되세요!") print() # 하나의 함수로 모든 학생에게 인사 greet_student("김민지") greet_student("이준호") greet_student("박하은") greet_student("정도윤")

예제 2: 개인 성적 계산기

문제 상황: 학생마다 다른 점수로 성적을 계산해야 합니다.

def calculate_grade(name, korean, english, math): """개별 학생의 성적을 계산하는 함수""" print(f"=== {name} 학생 성적표 ===") # 평균 계산 average = (korean + english + math) / 3 # 성적 출력 print(f"국어: {korean}점") print(f"영어: {english}점") print(f"수학: {math}점") print(f"평균: {average:.1f}점") # 등급 판정 if average >= 90: grade = "A" elif average >= 80: grade = "B" elif average >= 70: grade = "C" else: grade = "F" print(f"등급: {grade}") print() # 여러 학생의 성적 계산 calculate_grade("김민지", 85, 92, 88) calculate_grade("이준호", 90, 88, 95) calculate_grade("박하은", 76, 84, 89)

🔢 여러 개의 매개변수

순서가 중요한 매개변수

def print_student_info(name, grade, class_num, number): """학생의 상세 정보를 출력하는 함수""" print("📋 === 학생 정보 === 📋") print(f"이름: {name}") print(f"학년: {grade}학년") print(f"반: {class_num}반") print(f"번호: {number}번") print() # 순서대로 전달해야 함 print_student_info("김민지", 2, 3, 15) print_student_info("이준호", 2, 3, 8)

계산기 함수들

def add(num1, num2): """두 수를 더하는 함수""" result = num1 + num2 print(f"{num1} + {num2} = {result}") return result def subtract(num1, num2): """두 수를 빼는 함수""" result = num1 - num2 print(f"{num1} - {num2} = {result}") return result def multiply(num1, num2): """두 수를 곱하는 함수""" result = num1 * num2 print(f"{num1} × {num2} = {result}") return result def divide(num1, num2): """두 수를 나누는 함수""" if num2 != 0: result = num1 / num2 print(f"{num1} ÷ {num2} = {result:.2f}") return result else: print("0으로 나눌 수 없습니다!") return None # 계산기 사용 add(10, 5) # 10 + 5 = 15 subtract(10, 3) # 10 - 3 = 7 multiply(4, 6) # 4 × 6 = 24 divide(15, 3) # 15 ÷ 3 = 5.00

⚡ 기본값 매개변수 (Default Parameters)

기본값이 있는 함수

def order_school_meal(menu, quantity=1, spiciness="보통"): """급식을 주문하는 함수 (개수와 맵기는 기본값 있음)""" print(f"📋 === 급식 주문 === 📋") print(f"메뉴: {menu}") print(f"개수: {quantity}개") print(f"맵기: {spiciness}") print("주문이 완료되었습니다!") print() # 다양한 호출 방법 order_school_meal("김치찌개") # quantity=1, spiciness="보통" order_school_meal("떡볶이", 2) # quantity=2, spiciness="보통" order_school_meal("라면", 1, "매움") # 모든 값 지정

실용적인 기본값 예제

def analyze_exam_result(subject, score, total_score=100): """시험 결과를 분석하는 함수""" print(f"=== {subject} 시험 결과 ===") # 백분율 계산 percentage = (score / total_score) * 100 print(f"점수: {score}점 / {total_score}점") print(f"백분율: {percentage:.1f}%") # 성취도 판정 if percentage >= 90: achievement = "매우 우수" elif percentage >= 80: achievement = "우수" elif percentage >= 70: achievement = "보통" else: achievement = "노력 필요" print(f"성취도: {achievement}") print() # 다양한 시험 분석 analyze_exam_result("수학", 85) # 만점 100점 analyze_exam_result("영어", 45, 50) # 만점 50점 analyze_exam_result("과학", 180, 200) # 만점 200점

🔖 키워드 인수 (Keyword Arguments)

이름으로 인수 전달하기

def library_book_loan(title, author, loan_days=7, extendable=True): """도서관에서 책을 대출하는 함수""" print(f"📚 === 책 대출 정보 === 📚") print(f"제목: {title}") print(f"저자: {author}") print(f"대출 기간: {loan_days}일") print(f"연장 가능: {'예' if extendable else '아니오'}") print() # 순서대로 전달 library_book_loan("해리포터", "J.K. 롤링") # 키워드로 전달 (순서 바뀌어도 됨) library_book_loan(author="토니 로빈스", title="부의 대화", loan_days=14) # 일부는 순서대로, 일부는 키워드로 library_book_loan("데미안", "헤르만 헤세", extendable=False)

학급 이벤트 관리 예제

def plan_class_event(event_name, date, location="교실", fee=0, items="없음"): """학급 이벤트를 계획하는 함수""" print(f"🎉 === {event_name} 계획 === 🎉") print(f"날짜: {date}") print(f"장소: {location}") print(f"참가비: {fee:,}원") print(f"준비물: {items}") print("-" * 30) # 다양한 이벤트 계획 plan_class_event("반 모임", "2024년 3월 15일") plan_class_event( event_name="체육대회 응원", date="2024년 4월 20일", location="운동장", items="응원도구, 모자" ) plan_class_event( "영화 관람", "2024년 5월 10일", location="CGV 강남점", fee=12000, items="학생증" )

📊 데이터 처리 예제: 학생 정보 관리 시스템

학생 정보 등록 함수

def register_student(name, student_id, grade=1, phone="미등록", address="미등록"): """새로운 학생을 등록하는 함수""" print(f"📝 === 학생 등록 완료 === 📝") print(f"이름: {name}") print(f"학번: {student_id}") print(f"학년: {grade}학년") print(f"전화번호: {phone}") print(f"주소: {address}") print("등록이 완료되었습니다!") print() # 다양한 방법으로 학생 등록 register_student("김민지", "2024001") register_student("이준호", "2024002", grade=2, phone="010-1234-5678") register_student( name="박하은", student_id="2024003", grade=3, phone="010-9876-5432", address="서울시 강남구" )

성적 처리 함수

def input_and_analyze_grades(name, **subject_scores): """학생의 여러 과목 성적을 입력받아 분석하는 함수""" print(f"📊 === {name} 학생 성적 분석 === 📊") score_list = list(subject_scores.values()) subject_count = len(score_list) if subject_count == 0: print("입력된 성적이 없습니다.") return # 과목별 점수 출력 print("📋 과목별 점수:") for subject, score in subject_scores.items(): print(f" {subject}: {score}점") # 통계 계산 total = sum(score_list) average = total / subject_count highest = max(score_list) lowest = min(score_list) print(f"\n📈 성적 통계:") print(f" 총점: {total}점") print(f" 평균: {average:.1f}점") print(f" 최고점: {highest}점") print(f" 최저점: {lowest}점") # 등급 판정 if average >= 90: grade = "A" elif average >= 80: grade = "B" elif average >= 70: grade = "C" else: grade = "F" print(f" 등급: {grade}") print() # 다양한 과목 성적 입력 input_and_analyze_grades("김민지", 국어=85, 영어=92, 수학=88) input_and_analyze_grades( "이준호", 국어=90, 영어=88, 수학=95, 과학=87, 사회=91 ) input_and_analyze_grades("박하은", 국어=76, 영어=84)

🛍️ 실용 예제: 온라인 쇼핑몰 시스템

상품 주문 함수

def order_product(product_name, quantity, price, shipping_fee=3000, discount_rate=0): """온라인 쇼핑몰에서 상품을 주문하는 함수""" print(f"🛒 === 주문 확인서 === 🛒") print(f"상품명: {product_name}") print(f"수량: {quantity}개") print(f"단가: {price:,}원") # 가격 계산 product_amount = price * quantity discount_amount = int(product_amount * discount_rate) shipping_cost = shipping_fee if product_amount < 50000 else 0 # 5만원 이상 무료배송 total_amount = product_amount - discount_amount + shipping_cost print(f"\n💰 결제 정보:") print(f" 상품 금액: {product_amount:,}원") if discount_amount > 0: print(f" 할인 금액: -{discount_amount:,}원") print(f" 배송비: {shipping_cost:,}원") print(f" 총 결제 금액: {total_amount:,}원") if shipping_cost == 0 and product_amount >= 50000: print("🎉 무료배송 혜택이 적용되었습니다!") print() # 다양한 주문 처리 order_product("노트북", 1, 800000) order_product("무선마우스", 2, 25000, discount_rate=0.1) order_product( product_name="책상", quantity=1, price=120000, shipping_fee=5000, discount_rate=0.15 )

회원 정보 관리 함수

def sign_up(user_id, password, name, age=None, email=None, phone=None): """회원가입을 처리하는 함수""" print(f"👤 === 회원가입 완료 === 👤") print(f"아이디: {user_id}") print(f"이름: {name}") if age: print(f"나이: {age}세") if email: print(f"이메일: {email}") if phone: print(f"전화번호: {phone}") print("회원가입이 성공적으로 완료되었습니다!") print("환영합니다! 🎉") print() # 다양한 회원가입 방식 sign_up("user123", "password123", "김민지") sign_up( user_id="student456", password="mypassword", name="이준호", age=17, email="junho@email.com" ) sign_up( "haeun789", "secretpwd", "박하은", phone="010-1234-5678", email="haeun@email.com", age=16 )

🚨 자주 발생하는 오류와 해결법

오류 1: 필수 매개변수 누락

# ❌ 틀린 예시 def introduce_student(name, grade, class_num): print(f"{name}: {grade}학년 {class_num}반") introduce_student("김민지", 2) # 반 매개변수 누락 # TypeError: 학생_소개() missing 1 required positional argument: '반'

해결: 모든 필수 매개변수 전달

# ✅ 올바른 예시 introduce_student("김민지", 2, 3) # 모든 매개변수 전달

오류 2: 매개변수 순서 혼동

def print_grades(name, korean, english, math): print(f"{name}: 국어 {korean}, 영어 {english}, 수학 {math}") # ❌ 틀린 예시 - 순서 잘못 print_grades(85, "김민지", 90, 78) # 이름과 점수 순서 바뀜 # ✅ 올바른 예시 print_grades("김민지", 85, 90, 78) # 올바른 순서 # 또는 키워드 인수 사용 print_grades(name="김민지", korean=85, english=90, math=78)

오류 3: 기본값 매개변수 위치 오류

# ❌ 틀린 예시 - 기본값이 있는 매개변수가 앞에 옴 def wrong_function(name="익명", age): # SyntaxError print(f"{name}: {age}세") # ✅ 올바른 예시 - 기본값이 있는 매개변수가 뒤에 옴 def correct_function(age, name="익명"): print(f"{name}: {age}세")

💡 간단한 연습 예제

예제 1: 개인화된 인사 함수

def greet_with_time(name, time="오전"): """시간대에 따른 개인화된 인사""" print(f"{time}에 만나는 {name}님, 안녕하세요!") if time == "오전": print("좋은 하루 시작하세요!") elif time == "오후": print("점심은 드셨나요?") else: print("편안한 저녁 되세요!") # 다양한 사용법 greet_with_time("김민지") # 기본값 "오전" 사용 greet_with_time("이준호", "오후") # 시간 지정 greet_with_time("박하은", "저녁") # 저녁 인사

예제 2: 간단한 계산기

def simple_calculator(operation, a, b): """간단한 계산기 함수""" if operation == "add": result = a + b print(f"{a} + {b} = {result}") elif operation == "subtract": result = a - b print(f"{a} - {b} = {result}") elif operation == "multiply": result = a * b print(f"{a} × {b} = {result}") else: print("지원하지 않는 연산입니다") result = None return result # 계산기 사용 simple_calculator("add", 10, 5) # 10 + 5 = 15 simple_calculator("multiply", 3, 4) # 3 × 4 = 12

💡 매개변수와 인수 활용 팁

1. 함수 설계 원칙

  • 필수 정보는 매개변수로, 선택 정보는 기본값 매개변수로
  • 자주 사용하는 값을 기본값으로 설정
  • 의미가 명확한 이름 사용

2. 가독성 향상

  • 인수가 많을 때는 키워드 인수 사용
  • 함수 이름매개변수 이름을 명확하게 작성
  • docstring으로 매개변수 설명 추가

3. 유연성 확보

  • 기본값 매개변수로 함수 호출을 간단하게
  • 키워드 인수로 순서에 상관없이 호출
  • 가변 인수(*args, **kwargs)로 확장 가능한 함수 작성

✅ 매개변수와 인수 완성 체크리스트

✅ 매개변수와 인수 완성 체크리스트

🌟 다음 단계 미리보기

다음 토픽에서는 **반환값(return)**을 배워봅니다:

  • 함수가 결과를 돌려주는 방법
  • 계산 결과를 저장하고 활용하기
  • 더욱 강력한 함수 만들기

예를 들어:

def add(a, b): result = a + b return result # 결과를 돌려줌 total = add(10, 20) # 30이 저장됨 print(f"10 + 20 = {total}") # 결과 활용

함수가 진정한 계산 도구가 됩니다! 🚀

Last updated on