파이썬 함수에 매개변수 전달하기

함수의 유연성을 만드는 핵심 기술, 매개변수 전달법

“이걸 꼭 넣어야 하나요?”
처음 파이썬을 배우던 그때, 함수 옆 괄호 안에 뭔가를 꼭 써야만 한다는 게 귀찮고 헷갈렸다.
하지만 매개변수를 이해하고 나서야 알았다. 이건 코드의 ‘입’이었다. 우리가 넣는 말이 함수의 운명을 바꾼다.

Thank you for reading this post, don't forget to subscribe!

안녕하세요! 하루 하나씩 파이썬을 배우는 이 시리즈에 오신 걸 환영합니다.
오늘 주제는 “함수에 매개변수 전달하기”.
파이썬 함수에서 매개변수가 어떤 역할을 하는지, 그리고 우리가 얼마나 유연하게 다룰 수 있는지를 탐구할 거예요.
이 글은 초보 개발자뿐만 아니라, 함수 설계를 더 우아하게 만들고 싶은 모든 분들을 위한 가이드입니다.


기본 매개변수와 키워드 매개변수

함수를 정의할 때, 매개변수에 기본값을 넣을 수 있다.
이건 마치, 누군가 말을 걸었을 때 우리가 먼저 정해놓은 답을 미리 말하는 것과 같다.


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

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

기본값이 있다는 건, 배려의 코드다.
함수를 쓰는 사람 입장에서 더 자유로워진다.

키워드 매개변수는 호출 순서와 무관하게 매개변수 이름을 직접 명시해 인수를 전달할 수 있다.
더 명확한 의도를 전달할 수 있는 방법이기도 하다.


def introduce(name, age):
    print(f"{name}님은 {age}살입니다.")

introduce(age=30, name="민수")  # 출력: 민수님은 30살입니다.

가변 매개변수 *args, **kwargs

때론 몇 개의 인수가 들어올지 모를 때도 있다.
그럴 땐 *args**kwargs가 해결사다.


def sum_numbers(*args):
    return sum(args)

print(sum_numbers(1, 2, 3))  # 출력: 6

여기서 *args는 튜플처럼 동작하며, 원하는 만큼 숫자를 넣을 수 있다.


def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="지훈", age=25)

팩트 베기 문장:
“인수는 많아도 괜찮다. 문제는 그걸 ‘어떻게’ 받을지를 모를 때다.”


Call by Object Sharing의 진실

파이썬의 매개변수 전달 방식은 흔히 말하는 ‘Call by Value’나 ‘Call by Reference’가 아니다.
Call by Object Sharing 이라는 독특한 방식이다.

간단히 말해, 함수는 인수로 전달된 객체에 대한 ‘참조’를 공유한다.
그래서 가변 객체는 함수 내에서 바꾸면 원본도 바뀌고, 불변 객체는 바뀌지 않는다.


def modify_list(lst):
    lst.append(4)

my_list = [1, 2, 3]
modify_list(my_list)
print(my_list)  # 출력: [1, 2, 3, 4]

반면, 정수 같은 불변 객체는 다르다.


def modify_number(n):
    n += 1

num = 10
modify_number(num)
print(num)  # 출력: 10

✔ 핵심은 이것!
가변 객체는 ‘공유’되고, 불변 객체는 ‘복사된 것처럼’ 동작한다.

실전 예제로 매개변수 이해하기

  • 기본값으로 로그인 메시지를 설정하기
  • 여러 개의 수치를 받아 평균값 계산하기
  • 사용자 프로필을 **kwargs로 입력받아 JSON 반환

팩트 베기 문장:
“함수를 설계하는 자가, 프로그램의 리듬을 결정한다.”


실전 후기: 매개변수를 이해했을 때, 내 코드가 말하기 시작했다

파이썬을 배우던 초창기, 함수는 나에게 블랙박스였다.
그 안에 뭘 넣어야 할지 몰랐고, 넣으면 왜 그렇게 동작하는지도 알 수 없었다.
하지만 매개변수 전달 방식을 제대로 이해하고 나서 모든 게 달라졌다.

“매개변수를 이해하니까, 함수를 설계하는 게 재밌어졌어요.
그 전엔 그냥 ‘따라하기’였다면, 지금은 ‘내가 만드는 코드’가 됐죠.”
– 대학생 김모 씨

✔ 꿀팁 요약

  • 기본 매개변수는 호출 부담을 줄여준다.
  • *args와 **kwargs는 함수의 확장성을 보장한다.
  • Call by Object Sharing은 객체의 ‘성질’을 알아야 이해할 수 있다.

팩트 베기 문장:
“매개변수를 통제한다는 건, 결국 흐름을 설계하는 일이다.”


기본 매개변수는 무조건 마지막에 위치해야 하나요?
네. 파이썬에서는 기본 매개변수를 비기본 매개변수 앞에 쓸 수 없습니다. 순서가 중요합니다.
*args와 **kwargs는 같이 쓸 수 있나요?
물론입니다. 단, 순서는 반드시 *args가 먼저, **kwargs가 나중이어야 합니다.
리스트를 함수에 전달하면 원본이 바뀌는 이유는?
리스트는 가변 객체이기 때문에 함수 안에서 수정하면 외부의 원본 리스트도 함께 바뀝니다.
함수에 전달된 값을 복사하고 싶다면?
copy()copy.deepcopy()를 사용해 명시적으로 복사해야 합니다.
**kwargs를 받아서 어떤 매개변수가 들어왔는지 확인할 수 있나요?
네. kwargs.items()를 통해 키와 값을 모두 확인할 수 있습니다.


이미지와 참고 링크로 정리하는 매개변수 전달 핵심

복잡했던 개념도 이미지와 정리된 문서 하나면 훨씬 쉽게 이해됩니다.
함수의 매개변수 전달 개념은 실전에서 많이 쓰이니, 아래 자료들을 꼭 참고해 보세요.


파이썬 함수의 매개변수 전달 방식 정리 이미지

키워드 매개변수 설명 이미지


마무리하며: 함수는 ‘말하는 방식’을 바꾸는 도구다

오늘 우리는 함수를 통해 말하는 법을 배웠습니다.
그리고 그 말을 더 유연하고, 명확하고, 강력하게 만들 수 있다는 사실도요.
이제 매개변수는 부담이 아닌 가능성입니다.
하루 하나씩 배우는 지금, 매일의 코드가 더 견고해지길 바랍니다.

이 글이 도움이 되셨나요?

★★★★★ (5/5점 만점 중)

📌 포커스 키워드: 파이썬 함수 매개변수 전달


HANSORI.AI_Blog Labs에서 더 알아보기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.