Python

파이썬 사용자 정의 함수 완전 정복

코딩 코디네이터 2025. 4. 11. 10:00
반응형

파이썬 사용자 정의 함수 완전 정복 💡

반복되는 코드를 줄이고, 유지보수까지 쉬워지는 마법 같은 도구!
파이썬 사용자 정의 함수로 코딩 효율을 극대화해보세요.

 

 

안녕하세요, 여러분 😊

오늘은 파이썬을 조금 더 "파이썬답게" 쓸 수 있는 핵심 기능 중 하나인 사용자 정의 함수에 대해 이야기해보려 해요.

함수는 처음엔 좀 어려워 보이지만, 실제로는 우리가 매일 사용하는 믹서기나 커피 머신처럼 입력하면 정해진 출력이 나오는 구조랍니다.

실제로 코딩을 하다 보면 "아, 이 부분 계속 반복되는데?" 하는 순간이 있죠.

그럴 때 한번 정의해두고 편하게 불러 쓰는 함수가 바로 답이에요!

이번 글에서는 초보자도 부담 없이 따라할 수 있도록 사용자 정의 함수의 기본 개념부터 실전 활용 예제까지 친절하게 안내해드릴게요. 그럼 같이 시작해볼까요?

1. 함수란 무엇인가요? 🧠

함수(function)라는 말을 들으면 어렵게 느껴질 수 있어요.

하지만 여러분이 매일 사용하는 믹서기나 자동판매기를 떠올려보세요.

과일을 넣고 버튼을 누르면 주스가 나오듯, 입력(Input)을 주면 출력(Output)이 나오는 시스템, 그게 바로 함수예요!

파이썬에서는 자주 반복되는 코드 덩어리를 함수로 만들어두면, 필요할 때 간단히 함수 이름만 불러서 사용할 수 있어요.

이게 바로 유지보수와 생산성 향상의 핵심입니다.

🍹 함수 개념을 믹서기에 비유해보자

  • 입력(Input) = 과일, 얼음, 우유
  • 처리 과정 = 믹서기 작동 (코드 실행)
  • 출력(Output) = 완성된 주스 (결과값 반환)

📌 함수의 장점은 무엇일까요?

  1. 중복 코드를 줄여 코드의 재사용성을 높여줍니다.
  2. 코드의 가독성과 구조를 개선해 유지보수를 쉽게 만듭니다.
  3. 복잡한 문제를 작은 단위로 나눠서 관리할 수 있어요.

👀 실전 예제로 개념 정리하기

# 간단한 사용자 정의 함수 예시
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() 같은 함수에 간단한 계산식을 넣고 싶을 때
  • 코드가 너무 길어지는 걸 피하고 싶을 때!

🎯 마무리

자, 이제 파이썬의 사용자 정의 함수에 대해 정말 많은 걸 배웠어요!

함수는 단순한 반복 제거 도구가 아니라, 코드를 체계적으로 관리하고 가독성을 높여주는 핵심 요소랍니다.

이제 여러분은 함수를 자유자재로 만들고, 매개변수도 다양하게 쓰고, 필요한 값만 쏙쏙 리턴하는 똑똑한 코드를 작성할 수 있을 거예요.

그리고 때로는 한 줄로 끝내는 람다 함수까지 사용할 수 있다면... 오, 그건 진짜 실력자죠! 😉

 

반응형