Application/Python

[Python] 파이썬 함수 기초: def로 만들고 return으로 돌려받기

devsalix 2026. 4. 27. 09:03
728x90

파이썬 함수 기초: def로 만들고 return으로 돌려받기

코드를 좀 짜다 보면 똑같은 줄을 자꾸 반복해서 쓰고 있는 자신을 발견하실 거예요. 예를 들어 사람 이름 다섯 명한테 "안녕하세요"를 출력해주려면 print 다섯 번 쓰면 되긴 하는데요. 이게 50명이면요? 그리고 인사말을 살짝 바꾸려면 50줄을 다 고쳐야 하나요?

이럴 때 쓰라고 만든 게 함수예요.

지난 글에서 튜플과 딕셔너리로 여러 데이터를 묶는 법을 봤잖아요. 이번엔 코드 자체를 묶는 차례입니다.


파이썬 함수가 뭔가요? 자판기를 떠올려보세요

함수는 거창한 게 아니에요. 이름이 붙은 코드 묶음이에요.

자판기를 한번 떠올려보세요. 동전을 넣고 버튼을 누르면 음료가 나오죠. 한 번 만들어두면 백 번이고 천 번이고 똑같이 동작합니다. 함수도 똑같아요. 입력을 받아서 → 안에서 무언가 처리하고 → 결과를 돌려주는 작은 기계 한 대를 만든다고 보시면 됩니다.

수학에서 배운 함수랑 비슷한 개념이긴 한데요. 파이썬 함수는 훨씬 자유로워요. 숫자뿐 아니라 글자도 받을 수 있고, 결과를 돌려주지 않고 그냥 화면에 뭔가 띄워주기만 해도 되거든요.


python def 문법: 함수 만드는 법

함수를 만들 때 쓰는 키워드가 def예요. define(정의하다)의 줄임말입니다.

def hello():           # def + 함수이름 + () + 콜론
    print("안녕하세요")  # 본문은 들여쓰기 4칸

 

이게 끝이에요. 그런데 이 코드를 실행하면 화면에 뭐가 나올까요?

아무것도 안 나옵니다.

처음에 이 부분에서 많이들 당황하시는데요. def는 "이런 함수가 있어요"라고 등록만 해두는 거예요. 실제로 동작시키려면 한 번 더 불러줘야 합니다.

def hello():
    print("안녕하세요")

hello()  # 안녕하세요
hello()  # 안녕하세요  ← 한 번 만들어두고 계속 재사용

 

레시피를 적어놓는 것과 실제로 요리를 하는 건 다르잖아요. 그거랑 똑같다고 생각하시면 됩니다.


매개변수: 함수에 값을 넣어주기

매번 똑같은 인사말만 나오면 재미없죠. 이름을 받아서 그 사람한테 인사하는 함수를 만들어볼게요.

def greet(name):                   # 괄호 안에 받을 자리를 만든다
    print(f"{name}님, 반가워요")

greet("민수")  # 민수님, 반가워요
greet("지영")  # 지영님, 반가워요

 

괄호 안에 들어간 name매개변수라고 부르고요. 호출할 때 실제로 넣은 "민수", "지영" 같은 값을 인자라고 합니다. 용어가 헷갈리시면 일단 "받을 자리"랑 "넣는 값"으로만 기억하셔도 충분해요.


파이썬 return으로 값 돌려받기

여기서부터가 진짜예요. 함수가 결과값을 함수 밖으로 돌려주려면 return을 씁니다.

def add(a, b):
    return a + b   # a와 b를 더한 값을 밖으로 돌려준다

result = add(3, 5)
print(result)              # 8
print(add(10, 20) + 100)   # 130

 

돌려받은 값은 변수에 담을 수도 있고, 바로 다른 연산에 끼워 쓸 수도 있어요. 함수가 마치 숫자나 문자열처럼 값으로 변신하는 셈이죠.

return은 두 가지 일을 동시에 해요. 값을 밖으로 돌려주고, 동시에 함수 실행을 거기서 끝내버립니다.

def add(a, b):
    return a + b
    print("이 줄은 영원히 실행 안 돼요")  # 도달 불가능

 

return 아래에 코드를 적어도 절대 실행되지 않아요. 함수는 return을 만나는 순간 곧장 자기 일을 끝내고 밖으로 나옵니다.


print와 return, 헷갈리지 마세요

이게 이 글에서 제일 중요한 부분이에요. 처음 함수 배울 때 거의 모든 분이 한 번씩 걸려 넘어지는 지점이거든요.

def add_print(a, b):
    print(a + b)      # 화면에 보여주기만 한다

def add_return(a, b):
    return a + b      # 값을 밖으로 돌려준다

x = add_print(3, 5)   # 화면에 8이 출력됨
y = add_return(3, 5)  # 화면엔 아무것도 안 나옴

print(x)        # None  ← print만 한 함수는 None을 돌려줘요
print(y)        # 8
print(y * 2)    # 16
# print(x * 2)  # 에러! None * 2 는 안 됨

 

차이를 한 줄로 정리하면 이렇습니다.

print는 사람한테 보여주는 것, return은 다른 코드한테 넘겨주는 것.

 

print만 있고 return이 없는 함수는 자동으로 None을 돌려줘요. 그래서 그 결과를 다시 계산에 쓰려고 하면 TypeError가 터집니다. 초보자분들이 가장 자주 만나는 함정이에요.


실용 예제: BMI 계산기

함수가 진짜 빛을 발하는 순간은 같은 계산을 여러 번 할 때입니다.

def calc_bmi(weight, height_m):
    bmi = weight / (height_m ** 2)   # BMI 공식
    return round(bmi, 2)             # 소수점 둘째 자리까지

print(calc_bmi(65, 1.70))   # 22.49
print(calc_bmi(80, 1.75))   # 26.12

 

함수 하나 만들어두니까 가족 전체 BMI를 한 줄씩만 추가해서 구할 수 있죠. 만약 함수가 없었다면 BMI 공식을 매번 새로 적어야 했을 거예요.


자주 만나는 에러 두 가지

NameError: name 'greet' is not defined
함수를 정의하기 전에 호출했을 때 나는 에러예요. 파이썬은 위에서 아래로 코드를 읽으니까, 함수 정의가 호출보다 먼저 와야 합니다.

TypeError: missing 1 required positional argument
매개변수는 두 개인데 인자를 하나만 넣은 경우예요. add(3, 5)로 써야 할 걸 add(3)이라고 쓰면 이 에러가 납니다.


실습 과제

원의 넓이를 구해주는 함수 circle_area(r)을 직접 만들어보세요. 반지름을 받아서 3.14 * r * r을 돌려주면 됩니다. 다 만들었으면 반지름 5와 10을 넣어서 결과를 확인해보세요. 막히시면 댓글로 남겨주셔도 좋습니다.


오늘은 함수의 가장 기본적인 모양만 다뤘어요. 그런데 실제로 함수를 쓰다 보면 "이 매개변수는 안 넣으면 기본값을 쓰고 싶다"든가, "인자를 몇 개나 받을지 모르겠다" 같은 상황이 자주 생기거든요. 다음 글에서는 함수를 훨씬 더 유연하게 쓰는 방법, 매개변수와 기본값에 대해 이야기해볼게요.


 


제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀

 

 
728x90