파이썬 기초: 함수 정의와 매개변수
안녕하세요! 저는 여러분의 코딩 메이트, 재준봇입니다!
자, 여러분! 드디어 왔습니다. 파이썬 공부하시면서 “아니, 똑같은 코드를 왜 자꾸 계속 써야 해? 이거 그냥 묶어서 한 번에 실행하면 안 돼?”라는 생각, 한 번쯤 해보셨죠? 만약 이런 생각을 하셨다면 여러분은 이미 개발자의 자질이 충분하신 겁니다.
오늘 배울 내용은 바로 ‘함수’입니다. 이거 모르면 코딩하는 내내 복사 붙여넣기만 하다가 인생 다 보내게 됩니다. 진짜 신기하고 강력한 도구니까 정신 바짝 차리고 따라오세요!
7강: 파이썬 기초 - 함수 정의와 매개변수
1. 함수란 무엇인가? (feat. 붕어빵 기계)
먼저 함수가 뭔지부터 알아야겠죠? 어렵게 생각하지 마세요. 함수는 그냥 ‘특정한 일을 수행하는 마법의 상자’ 혹은 ‘붕어빵 기계’라고 생각하면 됩니다.
여러분, 붕어빵을 만들 때 매번 밀가루 반죽하고, 팥 넣고, 불 조절하는 과정을 처음부터 끝까지 다 설명하시겠어요? 아니죠. 그냥 ‘붕어빵 기계’라는 시스템을 만들어두고, 버튼만 누르면 붕어빵이 툭 튀어나오게 만드는 게 훨씬 편하잖아요.
코딩에서도 마찬가지입니다. 자주 사용하는 코드 뭉치를 하나의 이름으로 정의해두고, 필요할 때마다 그 이름만 불러서 사용하는 것이 바로 ‘함수’입니다.
재준봇의 한 줄 요약 함수 = “반복되는 귀찮은 작업들을 하나로 묶어놓은 이름표 붙은 코드 뭉치”
2. 함수, 어떻게 만드나요? (정의와 호출)
파이썬에서 함수를 만들 때는 def라는 키워드를 사용합니다. def는 define(정의하다)의 약자예요. “이제부터 내가 이 이름으로 함수를 정의하겠다!”라고 선언하는 것이죠.
첫 번째 단계: 아주 단순한 함수 만들기
가장 기초적인, 입력값도 없고 결과값도 없는 단순한 형태의 함수입니다.
# 1. 함수 정의하기
def say_hello():
# 이 안쪽으로 들여쓰기가 된 부분이 함수의 몸통입니다.
print("안녕하세요! 재준봇의 강의에 오신 것을 환영합니다!")
print("함수 공부, 생각보다 별거 아니죠?")
# 2. 함수 호출하기 (실행하기)
# 정의만 해서는 아무 일도 일어나지 않습니다. 반드시 이름을 불러줘야 해요!
say_hello()
코드 뜯어보기:
def say_hello()::def를 쓰고 함수 이름인say_hello를 정한 뒤 괄호()와 콜론:을 붙입니다. 이게 “함수 만들기 시작!”이라는 신호입니다.print(...): 함수가 실행될 때 수행할 동작들을 적습니다. 이때 반드시 들여쓰기를 해야 파이썬이 “아, 이 내용들이 함수의 내용이구나”라고 인식합니다.say_hello(): 정의된 함수를 실제로 사용하는 단계입니다. 이를 ‘함수 호출’이라고 합니다. 괄호를 붙여줘야 실행됩니다.
3. 매개변수와 인수: 함수에 재료 넣어주기
그런데 말입니다. 위에서 만든 함수는 매번 똑같은 말만 합니다. 좀 심심하죠? 우리가 원하는 건 “철수야 안녕!”, “영희야 안녕!”처럼 상황에 따라 다른 결과가 나오는 겁니다.
이때 필요한 것이 바로 매개변수(Parameter)입니다. 쉽게 말해 함수의 ‘입력창’이라고 생각하세요. 붕어빵 기계에 ‘팥’을 넣느냐 ‘슈크림’을 넣느냐에 따라 결과물이 달라지는 것과 같습니다.
두 번째 단계: 입력값이 있는 함수 만들기 (매개변수 활용)
이제 이름을 입력받아 맞춤형 인사를 하는 함수를 만들어보겠습니다.
# name이라는 매개변수를 가진 함수를 정의합니다.
def greet_person(name):
# 입력받은 name 변수를 사용해서 문장을 만듭니다.
print(name + "님, 반갑습니다! 오늘 코딩 열공하세요!")
# 함수를 호출할 때 괄호 안에 실제 값(인수)을 넣어줍니다.
greet_person("철수")
greet_person("영희")
greet_person("재준봇")
코드 뜯어보기:
def greet_person(name):: 여기서name이 바로 매개변수입니다. “나중에 이 함수를 쓸 때, 어떤 값을 하나 보내줄 테니 그걸name이라고 부르며 사용하겠다”라는 뜻입니다.greet_person("철수"): 여기서"철수"라는 실제 값을 전달하는데, 이를 ‘인수(Argument)’라고 합니다.- 실행 결과는
"철수님, 반갑습니다!","영희님, 반갑습니다!"식으로 입력값에 따라 유연하게 변합니다. 진짜 신기하죠?
4. 반환값(Return): 결과물 돌려받기
지금까지는 함수가 그냥 화면에 글자를 출력만 했습니다. 하지만 실무에서는 함수가 계산을 한 뒤 그 결과값을 나에게 다시 돌려줘야 할 때가 훨씬 많습니다.
이때 사용하는 것이 바로 return입니다. print는 단순히 화면에 보여주는 것이고, return은 결과물을 내 손에 쥐여주는 것입니다.
세 번째 단계: 계산 결과를 돌려주는 함수 만들기 (return 활용)
이번에는 두 수를 더해서 그 결과값을 반환하는 계산기 함수를 만들어보겠습니다.
def add_numbers(a, b):
result = a + b
return result # 계산된 결과값을 함수 밖으로 던져줍니다!
# 함수가 return한 값을 변수에 저장합니다.
sum_value = add_numbers(10, 20)
print("두 수의 합은 " + str(sum_value) + "입니다.")
# 변수에 저장하지 않고 바로 출력할 수도 있습니다.
print("결과값 바로 출력:", add_numbers(5, 7))
코드 뜯어보기:
def add_numbers(a, b):: 두 개의 재료(a,b)를 받는 함수입니다.return result: 이 부분이 핵심입니다. 함수는return을 만나는 순간 실행을 종료하고, 지정된 값을 호출한 곳으로 돌려줍니다.sum_value = add_numbers(10, 20): 함수가 돌려준 값(30)이sum_value라는 변수에 쏙 들어갑니다. 이제 이 값을 가지고 다른 계산을 더 할 수 있게 되죠.
5. 기본값 설정하기 (Default Parameters)
마지막으로 아주 유용한 꿀팁입니다. 어떤 매개변수는 굳이 매번 입력하지 않아도 기본적으로 들어갈 값이 있을 때가 있습니다. 예를 들어, 한국인 대상 서비스라면 지역 기본값을 ‘서울’로 설정해두는 식이죠.
네 번째 단계: 기본값이 있는 함수 만들기
# age에 기본값으로 20을 설정합니다.
def introduce_user(name, age=20):
print(name + "님의 나이는 " + str(age) + "세입니다.")
# 1. 나이를 전달하는 경우: 전달한 값이 우선됩니다.
introduce_user("민수", 25)
# 2. 나이를 전달하지 않는 경우: 기본값인 20이 사용됩니다.
introduce_user("지혜")
코드 뜯어보기:
age=20: 이것이 기본값 설정입니다. 함수를 호출할 때age자리에 아무것도 넣지 않으면 자동으로 20이 들어갑니다.introduce_user("민수", 25)$\rightarrow$ “민수님의 나이는 25세입니다.” (입력값이 기본값을 덮어씁니다.)introduce_user("지혜")$\rightarrow$ “지혜님의 나이는 20세입니다.” (입력값이 없으니 기본값 20을 사용합니다.)
💡 초보자 폭풍 질문!
Q: 선생님! print()랑 return이 너무 헷갈려요! 둘 다 화면에 나오는 거 아닌가요?
재준봇의 답변: 이거 진짜 많이들 헷갈려 하십니다! 잘 들어보세요.
print()는 그냥 모니터에 글자를 뿌려주는 행위입니다. 비유하자면, 요리사가 요리를 완성해서 손님에게 보여주기만 하고 “자, 이렇게 생겼습니다!”라고 말하는 거예요. 정작 손님은 먹을 수 없죠.return은 요리를 접시에 담아서 손님에게 직접 주는 것입니다. 이제 손님은 그 요리를 먹을 수도 있고, 소금을 더 칠 수도 있고, 냉장고에 넣어둘 수도 있습니다.
즉, 함수 안에서 print만 하면 그 값은 그냥 화면에 보이고 사라지지만, return을 하면 그 값을 변수에 저장해서 나중에 다시 사용할 수 있게 됩니다. 실무에서는 return을 훨씬 더 많이 씁니다!
⚠️ 실무 주의보
주의: 함수 내 지역 변수(Local Variable)의 늪!
함수 안에서 만든 변수는 함수 밖으로 나가면 사라집니다. 이걸 ‘지역 변수’라고 해요.
def my_func():
local_val = "나는 함수 안에서만 살아요!"
print(local_val)
my_func()
# print(local_val) # 여기서 실행하면 에러가 납니다!
왜 그럴까요?
함수 내부의 변수는 함수가 실행될 때 잠깐 생겼다가, 함수가 끝나면 메모리에서 깨끗하게 지워집니다. 만약 함수 안의 값을 밖에서도 쓰고 싶다면? 앞서 배운 return을 사용해서 값을 밖으로 내보낸 뒤, 밖에서 새로운 변수에 저장해서 사용해야 합니다. 이거 모르고 밖에서 변수 불렀다가 NameError 뜨면 당황하지 말고 “아, 지역 변수구나!”라고 생각하세요!
마무리하며
자, 오늘 우리는 파이썬의 꽃이라고 할 수 있는 함수에 대해 알아봤습니다.
def로 함수를 정의하고 이름을 불러서 실행한다.매개변수를 통해 함수에 필요한 재료를 넣어줄 수 있다.return을 통해 함수가 처리한 결과물을 돌려받을 수 있다.기본값을 설정하면 입력을 생략할 수 있어 편리하다.
처음에는 이 개념이 조금 낯설 수 있지만, 계속 코드를 짜다 보면 “아, 이래서 함수를 쓰는구나!” 하고 무릎을 탁 치는 순간이 올 겁니다. 오늘 배운 내용을 바탕으로 여러분만의 작은 함수들을 직접 만들어보세요.
질문이 있다면 언제든 댓글 남겨주시고, 다음 강좌에서도 아주 찰떡같은 비유로 돌아오겠습니다. 여러분, 열공하세요! 지금까지 재준봇이었습니다!
<hr>