Ch 06. 함수 정의와 코드 재사용 [파이썬 고등 수학 정복]

def, return으로 반복 코드는 이제 그만! 파이썬 함수로 나만의 수학 공식을 만들고 코드를 재사용하세요. 간결하고 강력한 함수 활용법 배우기!

Part 1: 수학 공부를 위한 파이썬 첫걸음

Chapter 6: 코드를 재사용하는 마법 (The Magic of Reusable Code - Functions)

학습 목표

  • 동일하거나 유사한 작업을 수행하는 코드 블록을 함수(Function)로 정의할 수 있다.
  • 함수를 정의할 때 def 키워드를 사용하고, 함수를 실행할 때 함수 이름을 호출하는 방법을 이해한다.
  • 함수에 값을 전달하는 매개변수(Parameter)와 함수가 결과를 반환하는 return 문의 역할을 이해한다.
  • 함수를 사용하여 코드를 더 간결하고, 재사용 가능하며, 이해하기 쉽게 만들 수 있다는 장점을 안다.
  • (선택) 함수 설명문(Docstring)을 작성하여 함수의 기능을 설명할 수 있다.

 

1. 똑같은 코드를 또? 함수로 만들자!

프로그래밍을 하다 보면 특정 작업을 여러 곳에서 반복적으로 수행해야 할 때가 많습니다. 예를 들어, 두 점 사이의 거리를 구하는 계산이나, 특정 조건에 따라 값을 판별하는 로직 등이 그렇습니다. 이런 코드를 필요할 때마다 복사해서 붙여넣는다면 코드가 길어지고, 나중에 수정할 일이 생겼을 때 모든 부분을 찾아 고쳐야 하는 불편함이 생깁니다.

함수(Function)는 이렇게 특정 작업을 수행하는 코드 블록에 이름을 붙여놓고, 필요할 때마다 그 이름만 불러서 실행할 수 있게 해주는 마법 같은 도구입니다. 함수를 사용하면 다음과 같은 장점이 있습니다.

  • 재사용성: 한 번 만들어두면 어디서든 필요할 때 호출하여 사용할 수 있습니다.
  • 간결성: 반복되는 코드가 줄어들어 전체 코드가 짧고 깔끔해집니다.
  • 가독성: 함수 이름만 보고도 어떤 작업을 하는 코드인지 쉽게 파악할 수 있습니다. (이름을 잘 짓는 것이 중요!)
  • 유지보수: 특정 기능에 수정이 필요할 때 해당 함수만 고치면 되므로 관리가 용이합니다.

우리는 이미 print(), len(), input(), range() 등 파이썬에 내장된 함수들을 사용해왔습니다. 이제 우리 스스로 필요한 함수를 직접 만들어 사용하는 방법을 배워봅시다!

 

2. 나만의 함수 만들기: defreturn

파이썬에서 함수를 만드는 것을 함수 정의(Function Definition)라고 하며, def 키워드를 사용합니다.

def 함수이름(매개변수1, 매개변수2, ...): """함수 설명문 (Docstring - 선택 사항)""" # 함수가 수행할 코드 블록 (반드시 들여쓰기!) # ... return 결과값

  • def: 함수 정의를 시작한다는 키워드입니다.
  • 함수이름: 함수를 호출할 때 사용할 이름입니다. 변수 이름 규칙과 동일하며, 함수의 기능을 잘 나타내는 동사 형태로 짓는 것이 좋습니다 (예: calculate_area, print_report).
  • 매개변수(Parameter): 함수가 호출될 때 외부로부터 값을 전달받기 위한 변수들입니다. 괄호 () 안에 콤마(,)로 구분하여 적습니다. 매개변수가 필요 없으면 빈 괄호 ()만 씁니다.
  • 콜론(:): 함수 정의부 끝을 나타냅니다.
  • 함수 설명문(Docstring): 함수가 어떤 기능을 하는지, 매개변수는 무엇인지, 무엇을 반환하는지 등을 설명하는 문자열입니다. 큰따옴표 세 개("""Docstring""")로 감싸서 작성하며, 필수는 아니지만 작성하는 것이 좋은 습관입니다.
  • 함수 본문(Body): 함수가 실제로 수행할 코드를 들여쓰기하여 작성합니다.
  • return 결과값: 함수가 작업을 수행한 후 호출한 곳으로 돌려줄 값(결과)입니다. return 문이 실행되면 함수는 즉시 종료되고 결과값을 반환합니다. 결과값을 돌려줄 필요가 없는 함수는 return 문을 생략할 수 있으며, 이 경우 함수는 None이라는 특별한 값을 반환합니다.

함수 호출 (Function Call): 정의된 함수를 실행하려면 함수 이름과 함께 괄호 () 안에 필요한 인자(Argument)를 넣어 호출합니다.

함수이름(인자1, 인자2, ...)

  • 인자(Argument): 함수를 호출할 때 매개변수에 실제로 전달되는 값입니다. 매개변수의 순서와 개수에 맞게 전달해야 합니다.

예제 1: 간단한 인사 함수

# 함수 정의
def greet(name):
  """입력받은 이름에게 인사하는 함수"""
  print(f"안녕하세요, {name}님!") # f-string 사용 (문자열 안에 변수 값 넣기)

# 함수 호출
greet("철수") # name 매개변수에 "철수"라는 인자가 전달됨
greet("영희")

실행 결과:

안녕하세요, 철수님!
안녕하세요, 영희님!

greet 함수는 결과를 반환하지 않으므로 return 문이 없습니다.

예제 2: 두 숫자를 더하는 함수 (결과 반환)

# 함수 정의
def add_numbers(a, b):
  """두 숫자 a와 b를 더한 결과를 반환하는 함수"""
  sum_result = a + b
  return sum_result # 계산된 합계를 반환

# 함수 호출 및 결과 사용
result1 = add_numbers(10, 5) # a에 10, b에 5가 전달됨. 함수는 15를 반환.
print(f"10 + 5 = {result1}")

result2 = add_numbers(-3, 8)
print(f"-3 + 8 = {result2}")

# 반환값을 바로 사용할 수도 있음
print(f"100 + 200 = {add_numbers(100, 200)}")

실행 결과:

10 + 5 = 15
-3 + 8 = 5
100 + 200 = 300

add_numbers 함수는 return 문을 사용하여 계산 결과를 호출한 곳으로 돌려줍니다. 반환된 값은 변수에 저장하거나 다른 계산에 바로 사용할 수 있습니다.

 

3. 함수로 수학 공식 구현하기

함수는 수학 공식을 코드로 구현하고 재사용하는 데 매우 유용합니다.

예제 3: 원의 넓이 계산 함수

import math # math.pi 사용 위해 import

def circle_area(radius):
  """반지름 radius를 입력받아 원의 넓이를 계산하여 반환"""
  if radius < 0:
    print("오류: 반지름은 음수가 될 수 없습니다.")
    return None # 오류 발생 시 None 반환
  area = math.pi * radius**2
  return area

# 함수 호출
area1 = circle_area(5)
if area1 is not None: # 반환값이 None이 아닐 때만 출력
    print(f"반지름 5인 원의 넓이: {area1:.4f}")

area2 = circle_area(10)
if area2 is not None:
    print(f"반지름 10인 원의 넓이: {area2:.4f}")

area_invalid = circle_area(-3) # 오류 메시지 출력됨
print(f"잘못된 반지름 입력 결과: {area_invalid}")

예제 4: 두 점 사이의 거리 계산 함수 (Chapter 9에서 다시 활용)

import math

def distance_between_points(x1, y1, x2, y2):
  """두 점 (x1, y1)과 (x2, y2) 사이의 거리를 계산하여 반환"""
  dx = x2 - x1
  dy = y2 - y1
  distance_sq = dx**2 + dy**2
  return math.sqrt(distance_sq)

# 함수 호출
p1_x, p1_y = 1, 2
p2_x, p2_y = 4, 6
dist = distance_between_points(p1_x, p1_y, p2_x, p2_y)
print(f"점 ({p1_x}, {p1_y})와 점 ({p2_x}, {p2_y}) 사이의 거리: {dist:.4f}") # 피타고라스 정리: 3^2 + 4^2 = 5^2 -> 거리 5

 

4. 왜 함수를 사용할까? 정리

함수를 사용하는 것은 좋은 프로그래밍 습관의 핵심입니다.

  • 코드 재사용: 같은 계산 로직을 여러 번 작성할 필요가 없습니다.
  • 가독성 향상: calculate_distance() 같은 이름은 그 코드가 무엇을 하는지 명확히 알려줍니다.
  • 구조화: 복잡한 문제를 여러 개의 작은 함수로 나누어 해결하면 전체 구조를 파악하기 쉽습니다.
  • 테스트 용이성: 각 함수가 올바르게 작동하는지 독립적으로 테스트하기 쉽습니다.
  • 협업: 여러 사람이 각자 맡은 함수를 개발하여 협업하기 좋습니다.

앞으로 더 복잡한 수학 문제를 파이썬으로 해결할 때, 함수는 여러분의 가장 강력한 무기 중 하나가 될 것입니다.

직접 해보기 (Follow Along Exercise)

섭씨 온도(Celsius)를 화씨 온도(Fahrenheit)로 변환하는 함수 celsius_to_fahrenheit(celsius)를 만들어보세요. 변환 공식은 F = (9/5) * C + 32 입니다. 함수를 정의한 후, 섭씨 0도, 25도, 100도를 각각 화씨로 변환하여 출력해보세요.

# 직접 함수를 정의하고 호출해보세요!
def celsius_to_fahrenheit(celsius):
  """섭씨 온도를 화씨 온도로 변환하여 반환"""
  fahrenheit = (9/5) * celsius + 32
  return fahrenheit

# 함수 호출 및 결과 출력
f0 = celsius_to_fahrenheit(0)
print(f"섭씨 0도는 화씨 {f0}도 입니다.")

f25 = celsius_to_fahrenheit(25)
print(f"섭씨 25도는 화씨 {f25}도 입니다.")

f100 = celsius_to_fahrenheit(100)
print(f"섭씨 100도는 화씨 {f100}도 입니다.")

 

연습 문제

  1. 정수 하나를 매개변수로 받아, 그 수가 짝수이면 True를, 홀수이면 False를 반환하는 함수 is_even(number)를 정의하고 테스트해보세요. (% 연산자 활용)
  2. 밑변(base)과 높이(height)를 매개변수로 받아 삼각형의 넓이를 계산하여 반환하는 함수 triangle_area(base, height)를 정의하고 테스트해보세요.
  3. 세 개의 숫자 a, b, c를 매개변수로 받아 그중 가장 큰 수를 찾아 반환하는 함수 find_max(a, b, c)를 정의하고 테스트해보세요. (if-elif-else 문 활용, max() 내장 함수는 사용하지 말 것)
  4. (심화) 정수 n을 매개변수로 받아 1부터 n까지의 합계를 계산하여 반환하는 함수 sum_up_to_n(n)for 반복문을 사용하여 정의하고 테스트해보세요.

이것으로 Part 1 (Chapter 1~6)의 상세 내용이 끝났습니다. 이 내용들을 바탕으로 학생들이 파이썬 기초를 탄탄히 다지고, 이를 수학 문제 해결에 적용하는 첫걸음을 뗄 수 있기를 바랍니다.

COMMENTS

이름

건강,21,경제,8,교통수단,6,선거,2,세금,1,시니어,1,음식,9,정부,7,집안관리,5,평생교육,15,software,11,
ltr
item
아이스콘.day: Ch 06. 함수 정의와 코드 재사용 [파이썬 고등 수학 정복]
Ch 06. 함수 정의와 코드 재사용 [파이썬 고등 수학 정복]
def, return으로 반복 코드는 이제 그만! 파이썬 함수로 나만의 수학 공식을 만들고 코드를 재사용하세요. 간결하고 강력한 함수 활용법 배우기!
아이스콘.day
http://www.icecone.day/2025/04/python-high-school-math-ch06-functions-reusable-code.html
http://www.icecone.day/
http://www.icecone.day/
http://www.icecone.day/2025/04/python-high-school-math-ch06-functions-reusable-code.html
true
7981093494699837537
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE Search in 아이스콘.day ALL POSTS Not found any post match with your request Back Home 일요일 월요일 화요일 수요일 목요일 금요일 토요일 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월 Jan Feb Mar Apr 5월 Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago 어제 $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy 목차