본문으로 건너뛰기
Python 기초집LESSON 07

함수 정의, 매개변수, 반환값

난이도입문
예상 시간30분
선수지식이전 강의

7강. 함수 정의, 매개변수, 반환값

1. 이번 강의에서 해결할 문제​

같은 피해 계산을 전투마다 복사하면 배율을 바꿀 때 여러 줄을 찾아 고쳐야 하고, 한 곳만 빠뜨리면 결과가 달라집니다. 입력·계산·출력이 한 덩어리이면 계산 규칙만 따로 확인하기도 어렵습니다. 이번 강의에서는 코드를 이름 있는 작업으로 묶고, 입력과 결과가 어디로 이동하는지 호출 순서대로 추적합니다.

2. 학습 목표​

3. 핵심 개념​

함수는 이름을 붙인 재사용 가능한 작업입니다​

함수는 필요한 값을 받아 한 가지 작업을 수행하고, 필요하면 결과를 호출한 곳에 돌려줍니다. 같은 규칙을 여러 번 사용하거나 계산 부분만 시험할 때 유용합니다. 단순히 줄 수를 줄이기보다 calculate_damage처럼 무엇을 책임지는지 이름으로 드러내는 것이 목적입니다.

용어 정리​

용어예시의미
함수 정의def calculate_damage(...):함수 이름과 실행할 코드를 만듭니다. 정의만으로 본문이 실행되지는 않습니다.
매개변수raw_damage, defense함수가 받을 값을 가리키는 정의 쪽 이름입니다.
인자calculate_damage(120, 20)의 120, 20실제 호출 시 전달하는 값입니다.
반환값return actual_damage호출 위치로 돌려보내 재사용할 수 있는 결과입니다.
지역 변수함수 안의 multiplier함수 호출 동안 그 함수 안에서만 사용하는 이름입니다.

print()는 사람이 화면에서 보도록 출력하지만 호출자에게 계산 결과를 주지는 않습니다. return은 결과를 돌려주며 그 줄에서 함수 실행을 끝냅니다. 명시적인 return이 없으면 함수는 None을 반환합니다.

언제 함수를 만들까​

  • 같은 규칙을 두 번 이상 사용해야 할 때
  • 계산, 입력, 출력처럼 변경 이유가 다른 작업을 분리할 때
  • 입력과 예상 결과를 주어 독립적으로 확인하고 싶을 때

반대로 한 줄을 무조건 함수로 감싸거나 입력·계산·파일 저장·출력을 한 함수에 모두 넣으면 이름만 늘고 책임은 여전히 모호합니다.

4. 가장 작은 예제로 시작하기​

def add_bonus(score):
result = score + 50
return result


final_score = add_bonus(120)
print(final_score)

코드 한 줄씩 이해하기​

  1. def add_bonus(score):가 함수를 정의합니다. 이때 본문은 아직 실행되지 않습니다.
  2. add_bonus(120)을 호출하면 인자 120이 매개변수 score에 연결됩니다.
  3. 함수 안에서 result는 170이 됩니다.
  4. return result가 170을 호출 위치로 돌려주고 함수 실행을 끝냅니다.
  5. 반환된 170이 final_score에 연결되고 출력됩니다.

add_bonus(200)으로 호출 값을 바꾸면 같은 규칙으로 250이 나옵니다. 함수 본문을 복사하지 않아도 입력만 바꿔 재사용한 것입니다.

5. 실행 결과와 동작 흐름​

파일 경로: C:\dev\game-log-analyzer\main.py

main.py
def calculate_damage(raw_damage, defense, critical=False):
multiplier = 1.5 if critical else 1.0
adjusted_damage = int(raw_damage * multiplier)
return max(0, adjusted_damage - defense)


def calculate_average(total, count):
if count == 0:
return 0.0
return total / count


damage = calculate_damage(120, 20, critical=True)
average = calculate_average(damage + 80, 2)
print(f"실제 피해: {damage}, 평균: {average:.1f}")
PowerShell · 실행
py -3.13 .\main.py

첫 호출 calculate_damage(120, 20, critical=True)의 흐름을 추적하면 다음과 같습니다.

순서현재 값설명
1raw_damage=120, defense=20, critical=True인자를 매개변수에 연결합니다.
2multiplier=1.5critical이 참이므로 치명타 배율을 선택합니다.
3adjusted_damage=180120 * 1.5를 정수 지표로 만듭니다.
4반환값 160방어력 20을 빼고 0보다 작지 않게 합니다.
5damage=160호출 위치가 반환값을 저장합니다.

calculate_average(160 + 80, 2)는 240 / 2를 반환하므로 예상 출력은 실제 피해: 160, 평균: 120.0입니다. count == 0을 먼저 처리하지 않으면 나눗셈에서 ZeroDivisionError가 납니다.

기본값 critical=False 덕분에 calculate_damage(120, 20)처럼 세 번째 인자를 생략할 수 있습니다. 선택 인자를 전달할 때 critical=True라는 키워드 형식은 True가 무엇을 뜻하는지 호출 코드에 남깁니다.

6. 자주 하는 실수와 해결법​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

10. 다음 강의 연결​

한 건의 피해 계산을 재사용 가능한 함수로 분리했습니다. 다음 강의에서는 여러 전투 기록을 리스트에 모으고, 함수가 처리할 데이터 묶음을 전달합니다.

MINI QUIZ

함수 정의, 매개변수, 반환값 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“함수 정의, 매개변수, 반환값” 코드 리뷰에서 동작 원리와 일치하는 설명은 무엇인가요?
  2. 문제 2“함수 정의, 매개변수, 반환값”에서 ‘기본값 매개변수를 앞에 배치’ 문제가 생겼습니다. 가장 알맞은 진단 또는 대응은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

7강. 함수 정의, 매개변수, 반환값 미완료 상태