
파이썬을 비롯한 모든 프로그래밍 언어를 학습할 때 가장 먼저 접하게 되는 기본 단위는 '함수(Function)'입니다. 하지만 함수를 정의하고 호출하는 과정에서 혼용되는 용어인 매개변수(Parameter)와 인자(Argument)의 차이를 정확히 구분하는 개발자는 생각보다 많지 않습니다. 이 글에서는 두 용어의 단순한 사전적 의미를 넘어, 파이썬의 동작 원리와 메모리 관점에서 이들이 어떻게 상호작용하는지 심도 있게 다룹니다.
1. 용어의 본질적 차이: 위치와 시점
가장 명확한 구분법은 '언제, 어디서 정의되는가'를 확인하는 것입니다. 이를 비유하자면, 매개변수는 커피 머신에 설계된 '캡슐 투입구'와 같고, 인자는 실제로 그 투입구에 넣는 '커피 캡슐' 그 자체라고 볼 수 있습니다.
- 매개변수 (Parameter): 함수 정의 시(Declaration) 나열되는 변수들입니다. 함수 내부에서 사용할 데이터를 담을 '그릇' 혹은 '플레이스홀더' 역할을 합니다.
- 인자 (Argument): 함수 호출 시(Invocation) 실제로 전달되는 값들입니다. 실행 시점에 매개변수에 할당되는 실질적인 데이터입니다.
2. 파이썬의 매개변수 전달 방식 (Call by Object Reference)
파이썬은 다른 언어와 달리 '값에 의한 전달(Call by Value)'이나 '참조에 의한 전달(Call by Reference)'이라는 용어만으로는 설명하기 힘든 객체 참조에 의한 전달(Call by Object Reference) 방식을 사용합니다. 인자로 전달된 객체의 가변성(Mutability)에 따라 매개변수가 영향을 받는 방식이 달라집니다.
| 구분 | 매개변수 (Parameter) | 인자 (Argument) |
|---|---|---|
| 존재 시점 | 함수 정의 시 (컴파일/정적 시점) | 함수 호출 시 (런타임/동적 시점) |
| 역할 | 변수명 (변수 이름을 지정) | 값 또는 데이터 (실제 데이터 객체) |
| 스코프 | 함수 내부 로컬 스코프에 한정 | 호출부 외부 스코프에 존재 가능 |
3. 다양한 인자 전달 기법
파이썬은 유연한 언어답게 매개변수와 인자를 매핑하는 여러 가지 방법을 제공합니다. 이는 코드의 가독성과 확장성을 결정짓는 중요한 요소입니다.
1) 위치 인자 (Positional Arguments)
가장 일반적인 방식으로, 인자가 매개변수의 순서에 따라 할당됩니다.
2) 키워드 인자 (Keyword Arguments)
인자를 전달할 때 매개변수의 이름을 명시합니다. 순서가 바뀌어도 상관없으며 가독성이 비약적으로 상승합니다.
3) 가변 인자 (*args, **kwargs)
개수가 정해지지 않은 인자를 받을 때 사용합니다. *args는 튜플 형태로 위치 인자들을 모으고, **kwargs는 딕셔너리 형태로 키워드 인자들을 모읍니다.
4. Sample Example: 실전 활용
아래 예시 코드를 통해 매개변수 정의와 인자 전달의 실제 사례를 확인해 보세요.
# 함수 정의 부분: name과 age는 '매개변수(Parameter)'입니다.
def introduce_developer(name, age, city="Seoul"):
print(f"Developer {name} is {age} years old and lives in {city}.")
# 함수 호출 부분: "Alice", 28은 '인자(Argument)'입니다.
# 1. 위치 인자 사용
introduce_developer("Alice", 28)
# 2. 키워드 인자 사용 (순서 무관)
introduce_developer(age=30, name="Bob")
# 3. 가변 인자 활용 예시
def track_skills(*skills):
for skill in skills:
print(f"Skill: {skill}")
# 여러 개의 인자를 자유롭게 전달
track_skills("Python", "Django", "PostgreSQL", "AWS")
5. 고급 주제: 기본 매개변수의 함정
매개변수 정의 시 기본값(Default value)을 설정할 수 있습니다. 하지만 리스트나 딕셔너리 같은 가변 객체(Mutable object)를 기본값으로 지정할 경우, 함수가 호출될 때마다 새로운 객체가 생성되는 것이 아니라 정의 시점에 생성된 객체가 계속 재사용되는 '기본값 공유 문제'가 발생할 수 있습니다. 이는 실무에서 매우 빈번하게 발생하는 논리적 오류 중 하나입니다.
6. 결론 및 요약
매개변수는 함수의 설계도에 적힌 명칭이며, 인자는 그 설계도에 따라 실제로 작동할 때 투입되는 연료입니다. 이 둘의 차이를 명확히 이해하고 파이썬 특유의 가변 인자와 객체 참조 방식을 활용한다면, 더욱 견고하고 유지보수가 쉬운 파이썬 코드를 작성할 수 있습니다.
7. 출처 및 참고 자료
- Python Software Foundation. "Glossary - Parameter vs Argument".
- Fluent Python, 2nd Edition by Luciano Ramalho (O'Reilly Media).
- Real Python. "Defining Your Own Python Function".
'Artificial Intelligence > 60. Python' 카테고리의 다른 글
| [PYTHON] 지역 변수(Local)와 전역 변수(Global)의 완벽 가이드 : 스코프의 원리와 메모리 관리 (0) | 2026.02.13 |
|---|---|
| [PYTHON] @staticmethod와 @classmethod : 객체지향 설계의 품격을 높이는 마법의 데코레이터 (0) | 2026.02.12 |
| [PYTHON] 대량 데이터 루프 성능 최적화 : 초당 백만 개 처리의 비밀 (0) | 2026.02.12 |
| [PYTHON] def로 함수를 정의하는 기본 구조 : 클린 코드를 위한 설계의 정석 (0) | 2026.02.12 |
| [PYTHON] return이 없는 함수는 무엇을 반환하나요? None의 비밀과 활용 (0) | 2026.02.12 |