본문 바로가기
Python

17. 함수 (1) - 코드를 재사용하는 방법

by 샤나엘 2026. 2. 22.
반응형

함수 (1) - 코드를 재사용하는 방법

17. 함수 (1) - 코드를 재사용하는 방법

같은 코드를 세 번 이상 반복하고 있다면, 그건 함수로 만들어야 한다는 신호다. 한 번 만들어두면 이름만 불러서 재사용할 수 있는 함수의 세계로 들어가보자.


함수가 필요한 이유

# 같은 인사를 여러 번...
print("=" * 20)
print("안녕하세요!")
print("=" * 20)

# 또...
print("=" * 20)
print("안녕하세요!")
print("=" * 20)

이걸 함수로 만들면:

def greet():
    print("=" * 20)
    print("안녕하세요!")
    print("=" * 20)

greet()   # 한 줄로 끝!
greet()   # 또 호출!

 

함수의 구조


함수 정의와 호출

def 함수이름():
    실행할 코드
  • def 키워드로 정의한다
  • 함수 이름 뒤에 괄호()콜론(:)을 쓴다
  • 실행할 코드는 들여쓰기한다
  • 정의만으로는 실행되지 않는다. 호출해야 실행된다
# 정의
def say_hello():
    print("Hello, Python!")

# 호출
say_hello()   # Hello, Python!
say_hello()   # Hello, Python!

매개변수와 인자

매개변수 (parameter)

함수에 입력값을 전달할 수 있다.

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

greet("김철수")           # "김철수"가 인자 → 안녕하세요, 김철수님!
greet("이영희")           # 안녕하세요, 이영희님!

여러 개의 매개변수

def add(a, b):
    print(f"{a} + {b} = {a + b}")

add(3, 5)      # 3 + 5 = 8
add(10, 20)    # 10 + 20 = 30
def introduce(name, age, city):
    print(f"이름: {name}, 나이: {age}세, 도시: {city}")

introduce("김철수", 25, "서울")

기본값 매개변수

매개변수에 기본값을 설정할 수 있다. 인자를 전달하지 않으면 기본값이 사용된다.

def greet(name, greeting="안녕하세요"):
    print(f"{greeting}, {name}님!")

greet("김철수")                # 안녕하세요, 김철수님!
greet("이영희", "반갑습니다")  # 반갑습니다, 이영희님!

⚠️ 주의: 기본값이 있는 매개변수는 뒤쪽에 와야 한다. def f(a="x", b):는 에러!

키워드 인자

인자를 이름으로 지정해서 전달할 수 있다. 순서를 바꿔도 된다.

def create_profile(name, age, city):
    print(f"{name} ({age}세, {city})")

# 위치 인자
create_profile("김철수", 25, "서울")

# 키워드 인자 - 순서 상관없음
create_profile(city="부산", name="이영희", age=30)

반환값 (return)

함수는 결과를 돌려줄 수 있다.

def add(a, b):
    return a + b       # 결과를 반환

result = add(3, 5)     # 반환값을 변수에 저장
print(result)          # 8

# 바로 사용도 가능
print(add(10, 20))     # 30

return의 역할

  1. 값을 돌려준다
  2. 함수를 즉시 종료한다 (return 이후의 코드는 실행 안 됨)
def check_age(age):
    if age >= 19:
        return "성인"
    return "미성년자"    # elif 없이도 깔끔

status = check_age(25)
print(status)   # 성인

여러 값 반환

def get_stats(numbers):
    return min(numbers), max(numbers), sum(numbers) / len(numbers)

low, high, avg = get_stats([85, 92, 78, 95, 88])
print(f"최소: {low}, 최대: {high}, 평균: {avg:.1f}")
# 최소: 78, 최대: 95, 평균: 87.6

💡 여러 값을 return하면 튜플로 반환된다. 14편에서 배운 튜플 언패킹으로 받으면 된다.

return이 없는 함수

return이 없으면 None을 반환한다.

def say_hello():
    print("Hello!")

result = say_hello()   # Hello! 출력
print(result)          # None

함수 설계 원칙

하나의 함수, 하나의 역할

# 나쁜 예: 너무 많은 일을 한다
def do_everything(data):
    # 데이터 정제 + 계산 + 출력 + 저장...
    pass

# 좋은 예: 역할을 나눈다
def clean_data(data):
    ...
def calculate(data):
    ...
def display(result):
    ...

이름은 동사로

# 좋은 함수 이름
def get_average(scores): ...
def is_valid(email): ...
def calculate_tax(income): ...
def print_report(data): ...

# 나쁜 함수 이름
def data(scores): ...     # 뭘 하는지 모름
def process(x): ...       # 너무 모호

실전 예시: 성적 관리 함수

def calculate_grade(score):
    """점수를 학점으로 변환"""
    if score >= 90: return "A"
    elif score >= 80: return "B"
    elif score >= 70: return "C"
    elif score >= 60: return "D"
    else: return "F"

def print_report(students):
    """성적표 출력"""
    print("=" * 35)
    print("        성적표")
    print("=" * 35)

    total = 0
    for name, score in students.items():
        grade = calculate_grade(score)
        print(f"  {name}: {score}점 ({grade})")
        total += score

    avg = total / len(students)
    print("-" * 35)
    print(f"  평균: {avg:.1f}점")

# 사용
scores = {"김철수": 85, "이영희": 92, "박민수": 78, "최지원": 95}
print_report(scores)

직접 해보기

문제 1. 두 수 중 큰 수를 반환하는 get_max(a, b) 함수를 만들어보자.

문제 2. 섭씨를 화씨로 변환하는 to_fahrenheit(celsius) 함수를 만들어보자. (공식: F = C × 9/5 + 32)

문제 3. 리스트의 평균을 구하는 get_average(numbers) 함수를 만들어보자. 빈 리스트면 0을 반환.

문제 4. BMI를 계산하고 판정을 반환하는 check_bmi(height_cm, weight) 함수를 만들어보자.

정답 보기
# 문제 1
def get_max(a, b):
    if a >= b:
        return a
    return b
‍
print(get_max(10, 20))    # 20
‍
# 문제 2
def to_fahrenheit(celsius):
    return celsius * 9 / 5 + 32
‍
print(f"100°C = {to_fahrenheit(100)}°F")    # 212.0
‍
# 문제 3
def get_average(numbers):
    if not numbers:
        return 0
    return sum(numbers) / len(numbers)
‍
print(get_average([85, 90, 78]))    # 84.33...
print(get_average([]))               # 0
‍
# 문제 4
def check_bmi(height_cm, weight):
    height_m = height_cm / 100
    bmi = weight / (height_m ** 2)
    if bmi < 18.5:
        category = "저체중"
    elif bmi < 23:
        category = "정상"
    elif bmi < 25:
        category = "과체중"
    else:
        category = "비만"
    return bmi, category
‍
bmi, cat = check_bmi(175, 70)
print(f"BMI: {bmi:.1f}, 판정: {cat}")

오늘의 정리

항목 내용
함수 정의 def 이름(매개변수):
매개변수 함수에 전달하는 입력값. 기본값 설정 가능
return 값 반환 + 함수 종료. 여러 값 반환 가능 (튜플)
키워드 인자 함수(name="값") — 이름으로 인자 전달
설계 원칙 하나의 함수 = 하나의 역할. 이름은 동사로

다음 편 예고: 함수 (2) - 스코프와 고급 기능

함수 안에서 만든 변수는 밖에서 쓸 수 있을까? *args**kwargs는 뭘까? 람다 함수는? 함수의 심화 기능들을 알아보자.


태그: 파이썬 Python 파이썬독학 함수 def 매개변수 반환값 return 파이썬함수 파이썬기초 IT교육

반응형

댓글