파이썬 사용자 정의 함수 완전 정복
파이썬 사용자 정의 함수 완전 정복 💡
반복되는 코드를 줄이고, 유지보수까지 쉬워지는 마법 같은 도구!
파이썬 사용자 정의 함수로 코딩 효율을 극대화해보세요.
안녕하세요, 여러분 😊
오늘은 파이썬을 조금 더 "파이썬답게" 쓸 수 있는 핵심 기능 중 하나인 사용자 정의 함수에 대해 이야기해보려 해요.
함수는 처음엔 좀 어려워 보이지만, 실제로는 우리가 매일 사용하는 믹서기나 커피 머신처럼 입력하면 정해진 출력이 나오는 구조랍니다.
실제로 코딩을 하다 보면 "아, 이 부분 계속 반복되는데?" 하는 순간이 있죠.
그럴 때 한번 정의해두고 편하게 불러 쓰는 함수가 바로 답이에요!
이번 글에서는 초보자도 부담 없이 따라할 수 있도록 사용자 정의 함수의 기본 개념부터 실전 활용 예제까지 친절하게 안내해드릴게요. 그럼 같이 시작해볼까요?
목차
1. 함수란 무엇인가요? 🧠
함수(function)라는 말을 들으면 어렵게 느껴질 수 있어요.
하지만 여러분이 매일 사용하는 믹서기나 자동판매기를 떠올려보세요.
과일을 넣고 버튼을 누르면 주스가 나오듯, 입력(Input)을 주면 출력(Output)이 나오는 시스템, 그게 바로 함수예요!
파이썬에서는 자주 반복되는 코드 덩어리를 함수로 만들어두면, 필요할 때 간단히 함수 이름만 불러서 사용할 수 있어요.
이게 바로 유지보수와 생산성 향상의 핵심입니다.
🍹 함수 개념을 믹서기에 비유해보자
- 입력(Input) = 과일, 얼음, 우유
- 처리 과정 = 믹서기 작동 (코드 실행)
- 출력(Output) = 완성된 주스 (결과값 반환)
📌 함수의 장점은 무엇일까요?
- 중복 코드를 줄여 코드의 재사용성을 높여줍니다.
- 코드의 가독성과 구조를 개선해 유지보수를 쉽게 만듭니다.
- 복잡한 문제를 작은 단위로 나눠서 관리할 수 있어요.
👀 실전 예제로 개념 정리하기
# 간단한 사용자 정의 함수 예시
def say_hello():
print("안녕하세요! 함수에 오신 걸 환영해요 :)")
say_hello()
위 코드에서 say_hello()
는 아무 입력값도 필요 없지만, 호출하면 언제든 같은 인사를 출력해 줍니다.
이처럼 코드를 간단하게 묶어 이름을 붙여두는 것이 함수의 기본이에요.
아직 어렵게 느껴지시나요? 걱정 마세요.
다음 단계에서는 함수를 직접 만드는 법과 그 구조를 차근차근 설명드릴게요!
2. 함수의 기본 구조와 사용법 📐
파이썬에서 함수를 만들 때는 반드시 지켜야 할 기본 구조가 있어요.
어렵지 않으니 구조만 확실히 익혀두면 코딩할 때 쓱쓱 써먹을 수 있습니다.
🔧 함수의 기본 구조
def 함수이름(매개변수):
수행할 문장
return 반환값
여기서 def
는 "define"의 약자로, 함수를 정의할 때 꼭 써야 해요.
함수 이름은 자유롭게 정할 수 있지만 숫자로 시작하면 안 되고, 예약어는 사용 금지입니다.
📍 함수 예제: 덧셈 기능 만들기
def add(a, b):
result = a + b
return result
print(add(3, 5))
위 함수는 두 숫자를 입력받아 더한 결과를 반환해줍니다.
return
이 없으면 값을 돌려주지 않고 내부에서 끝나버리니, 결과가 필요한 경우엔 반드시 써야 해요!
💡 꼭 기억해야 할 함수 규칙
- 함수 정의는 반드시 들여쓰기로 내부 코드를 구분해야 해요.
- 함수를 정의한 후에 반드시 호출해야 실행됩니다.
- 매개변수와 인수의 수가 맞지 않으면 오류가 발생합니다.
📘 함수 정의 vs 함수 호출
구분 | 설명 | 예시 |
---|---|---|
정의 | 함수의 내용을 만드는 것 | def hello(): |
호출 | 함수를 사용하는 것 | hello() |
이제 함수의 뼈대를 이해했으니,
다음으로는 매개변수와 인수의 종류를 살펴보며 조금 더 유연하게 함수를 다뤄볼 차례입니다! 😊
3. 매개변수와 인수의 종류 정리 🧺
함수에서 자주 혼동되는 개념이 바로 매개변수(Parameter)와 인수(Argument)입니다.
두 용어는 헷갈릴 수 있지만, 구분해서 알면 함수의 동작이 더 명확해져요!
🔍 매개변수 vs 인수
용어 | 의미 | 예시 |
---|---|---|
매개변수 (parameter) | 함수 정의 시 입력값을 받을 변수 | def greet(name): |
인수 (argument) | 함수 호출 시 전달하는 실제 값 | greet("철수") |
🧩 다양한 매개변수 형태
파이썬에서는 다양한 상황을 고려해 매개변수의 형태도 유연하게 사용할 수 있어요.
아래 표로 정리해 볼게요!
유형 | 설명 | 예시 |
---|---|---|
일반 매개변수 | 정해진 수의 값을 받음 | def add(a, b): |
기본값 매개변수 | 값을 넘기지 않으면 기본값 사용 | def greet(name="익명"): |
가변 인자 (*args) | 여러 개의 인수를 튜플로 받음 | def total(*nums): |
키워드 인자 (**kwargs) | 키워드와 값을 딕셔너리로 받음 | def info(**data): |
📦 실습 예제 - 다양한 매개변수 사용
def show_profile(name, age=18, *hobbies, **skills):
print("이름:", name)
print("나이:", age)
print("취미:", hobbies)
print("기술:", skills)
show_profile("영희", 20, "독서", "요리", python=3, html=2)
위 코드처럼 *args
는 여러 개의 인수를 묶어주고, **kwargs
는 키와 값을 가진 인수를 유연하게 처리해줍니다.
다양한 입력을 받는 함수가 필요할 땐 정말 유용해요!
이제 우리는 함수에서 어떻게 입력을 받고 활용하는지에 대해 탄탄하게 정리했어요.
그럼 다음은 반환값(return)에 대해 알아보러 가볼까요? 😊
4. 다양한 반환값과 리턴 활용법 🔁
함수는 어떤 "처리"를 하고 나면 그 결과를 돌려줄 수도 있고, 안 돌려줄 수도 있어요.
바로 그 결과를 돌려주는 역할을 하는 게 return
문입니다.
함수의 마무리를 맡고 있는 아주 중요한 녀석이죠!
📦 반환값의 유무에 따른 함수 유형
구분 | 설명 | 예시 |
---|---|---|
입력값 O, 반환값 O | 가장 일반적인 형태 | def add(a, b): return a + b |
입력값 X, 반환값 O | 값은 안 받지만 무언가 돌려줌 | def get_num(): return 5 |
입력값 O, 반환값 X | 처리만 하고 끝냄 (출력만) | def say(name): print(name) |
입력값 X, 반환값 X | 아무 것도 받지도, 주지도 않음 | def hello(): print("hi") |
🔁 여러 값을 동시에 반환할 수 있을까?
네! 파이썬에서는 return으로 여러 개의 값을 한꺼번에 반환할 수 있습니다.
반환되는 값들은 자동으로 튜플
로 묶여요.
def divide(a, b):
q = a // b
r = a % b
return q, r
quotient, remainder = divide(10, 3)
print("몫:", quotient, "나머지:", remainder)
이처럼 return q, r
처럼 쉼표로 구분하면, 튜플 형태로 두 값이 반환되고 이를 한 줄로 각각의 변수에 담을 수 있어요.
아주 깔끔하고 편하죠?
🧯 리턴이 없는 함수는 어떤 값을 돌려줄까?
리턴 문이 없는 함수는 자동으로 None이라는 값을 반환합니다. 이것은 파이썬에서 ‘아무 것도 없음’을 나타내는 특수한 자료형이에요.
def nothing():
pass
result = nothing()
print(result) # 출력 결과: None
📌 리턴은 함수를 끝내는 역할도 한다!
return
은 단지 결과를 돌려주는 것뿐만 아니라 함수의 실행을 종료시키는 역할도 합니다.
return 아래의 코드는 실행되지 않으니 주의하세요!
def stop_here():
print("여기까지 실행됩니다.")
return
print("이 코드는 실행되지 않아요!")
함수를 설계할 때 어떤 값을 돌려줄지, 어디서 종료할지 잘 설계하는 것이 중요해요.
함수의 핵심은 결국 입력과 출력의 흐름을 설계하는 것이니까요!
5. 변수의 범위와 global 키워드 🌍
파이썬에서는 변수가 선언된 위치에 따라 사용할 수 있는 범위가 달라요.
바로 이걸 변수의 스코프(Scope)라고 부르죠.
코드를 작성할 때 예상치 못한 오류를 피하려면 꼭 알아야 해요!
📍 지역 변수 vs 전역 변수
구분 | 설명 | 예시 |
---|---|---|
지역 변수 (local) | 함수 내부에서만 사용 가능 | def func(): a = 10 |
전역 변수 (global) | 파일 전체에서 사용 가능 | a = 10 (함수 밖) |
🔒 함수 안에서 전역 변수 사용하기
a = 100
def show():
a = 200
print("함수 안:", a)
show()
print("함수 밖:", a)
위 코드에서 함수 안의 a
는 지역 변수이기 때문에, 전역 변수 a = 100
과는 전혀 다른 존재예요!
즉, 함수 안에서 같은 이름의 변수를 새로 만든 셈이죠.
🌐 전역 변수 사용을 강제하려면? - global 키워드
함수 안에서도 전역 변수 값을 변경하고 싶다면 global
키워드를 사용해야 해요.
아래 예제를 봐요:
money = 1000
def buy():
global money
money -= 300
print("구매 후 남은 돈:", money)
buy()
print("전역 money:", money)
global money
를 선언하면 함수 안에서도 전역 변수인 money
를 직접 수정할 수 있어요.
하지만 너무 자주 사용하면 프로그램이 꼬일 수 있으니, global 키워드는 정말 필요할 때만! 쓰는 게 좋아요.
📌 정리하자면!
- 지역 변수는 함수 내부에서만 사용 가능!
- 전역 변수를 함수 안에서 수정하려면
global
키워드를 꼭 선언! - 전역 변수는 가급적 함수 밖에서만 관리하는 것이 베스트!
이제 변수의 범위에 대한 개념도 확실히 정리했어요!
마지막으로, 함수의 세계에서 가장 간결하면서도 강력한 무기, 바로 lambda
함수에 대해 알아보러 가볼까요? 🚀
6. 한 줄로 끝내는 람다(lambda) 함수 ✍️
여러 줄 짜기 귀찮을 때, 정말 간단한 계산만 하고 싶을 때 쓰는 게 바로 lambda 함수입니다.
이름 없는 익명 함수라고도 불려요.
심플하게 쓰고, 빠르게 처리할 수 있다는 장점이 있죠!
🔧 lambda 기본 구조
lambda 매개변수: 표현식
이렇게 간단하게 선언하고, 바로 결과를 반환해요.
return
도 필요 없습니다!
아래처럼 변수에 담아 사용할 수도 있고, 다른 함수에 인자로 넘길 수도 있죠.
add = lambda x, y: x + y
print(add(3, 4)) # 결과: 7
📌 언제 lambda를 쓰면 좋을까?
- 함수 이름 없이 바로 실행하고 싶을 때
-
map()
,filter()
같은 함수에 간단한 계산식을 넣고 싶을 때 - 코드가 너무 길어지는 걸 피하고 싶을 때!
🎯 마무리
자, 이제 파이썬의 사용자 정의 함수에 대해 정말 많은 걸 배웠어요!
함수는 단순한 반복 제거 도구가 아니라, 코드를 체계적으로 관리하고 가독성을 높여주는 핵심 요소랍니다.
이제 여러분은 함수를 자유자재로 만들고, 매개변수도 다양하게 쓰고, 필요한 값만 쏙쏙 리턴하는 똑똑한 코드를 작성할 수 있을 거예요.
그리고 때로는 한 줄로 끝내는 람다 함수까지 사용할 수 있다면... 오, 그건 진짜 실력자죠! 😉