Python에서 `vars()`와 `**` 구문은 객체의 속성을 다루고 함수에 전달하는 데 매우 유용한 도구입니다. 이 둘의 개념과 활용법을 자세히 살펴보겠습니다.
먼저 `vars()` 함수부터 이해해보겠습니다. 이 함수는 객체가 가진 모든 변수를 딕셔너리 형태로 보여줍니다. 마치 서랍장에 있는 물건들의 목록을 보는 것과 비슷합니다. 예를 들어:
class Person:
def __init__(self):
self.name = "John"
self.age = 25
self.city = "Seoul"
person = Person()
print(vars(person)) # {'name': 'John', 'age': 25, 'city': 'Seoul'}
다음으로 `**` 연산자를 살펴보겠습니다. 이 연산자는 딕셔너리의 내용을 함수의 매개변수로 풀어서 전달합니다. 마치 봉투에 담긴 여러 편지를 각각의 받는 사람에게 전달하는 것과 같습니다:
def introduce(name, age, city):
print(f"{name}은 {age}살이고 {city}에 살고 있습니다.")
info = {'name': 'John', 'age': 25, 'city': 'Seoul'}
introduce(**info) # "John은 25살이고 Seoul에 살고 있습니다." 출력
이제 `vars()`와 `**`를 함께 사용하면 어떤 장점이 있는지 알아보겠습니다. 이 둘을 조합하면 객체의 모든 속성을 함수에 깔끔하게 전달할 수 있습니다:
class Student:
def __init__(self):
self.name = "Jane"
self.grade = "A"
self.subject = "Math"
def print_report(name, grade, subject):
print(f"학생 {name}은 {subject} 과목에서 {grade} 학점을 받았습니다.")
student = Student()
# 방법 1: 각각의 속성을 일일이 전달
print_report(name=student.name, grade=student.grade, subject=student.subject)
# 방법 2: vars()와 ** 사용하여 간단히 전달
print_report(**vars(student))
이러한 방식은 특히 많은 속성을 가진 객체를 다룰 때 코드를 훨씬 간결하고 관리하기 쉽게 만들어줍니다. 또한 객체의 속성이 추가되거나 변경되어도 함수 호출 부분을 수정할 필요가 없다는 장점이 있습니다. 단, 함수의 매개변수 이름과 객체의 속성 이름이 정확히 일치해야 한다는 점을 주의해야 합니다.
'프로그래밍 > 모르는 코드 정리' 카테고리의 다른 글
Python을 활용한 TCP 소켓 통신의 이해와 구현 (0) | 2025.03.12 |
---|---|
Matplotlib에서 한글 폰트 깨짐 문제 해결하기 (0) | 2025.03.05 |