Python의 패킹(Packing)과 언패킹(Unpacking)??

SOCICAL·2025년 1월 31일
0
# 최근 수정 날짜: 25.01.31


Python에서 패킹(Packing)언패킹(Unpacking)은 변수에 여러 개의 값을 효율적으로 할당하고 사용할 수 있도록 도와주는 강력한 기능이다. 이를 활용하면 코드의 가독성을 높이고, 보다 Pythonic한 방식으로 데이터를 다룰 수 있다.

What is Pythonic?

  • Pythonic한 방식이란?
  • Python의 철학과 스타일을 따르는 방식
  • 가독성이 높고 직관적인 코드 작성
  • Python의 내장 기능(튜플 언패킹, 리스트 컴프리헨션 등) 활용
  • 불필요한 복잡성을 줄이고 간결한 코드 유지

그냥..일단 Pythonic한 코드는 Python답고, 효율적이며, 가독성이 높은 코드라고 이해하면 될 것 같다.. 😊🚀

1. 패킹(Packing) 이란?

패킹(Packing)은 여러 개의 값을 하나의 변수(튜플, 리스트 등)로 묶는 것을 의미한다.

# 여러 개의 값을 하나의 변수에 패킹
numbers = 1, 2, 3, 4, 5  # 튜플로 자동 패킹됨
print(numbers)  # (1, 2, 3, 4, 5)

words = ["Python", "is", "fun"]  # 리스트 패킹
print(words)  # ['Python', 'is', 'fun']

위의 예제에서 numbers는 여러 개의 정수를 하나의 튜플로 패킹했고, words는 리스트로 패킹한 예시이다.


2. 언패킹(Unpacking) 이란?

언패킹(Unpacking)은 패킹된 변수(튜플, 리스트 등)에서 개별 요소를 각각의 변수에 할당하는 과정을 말한다.

# 튜플 언패킹
numbers = (1, 2, 3)
a, b, c = numbers  # 각각의 변수에 값 할당
print(a, b, c)  # 1 2 3

# 리스트 언패킹
words = ["Hello", "World"]
x, y = words
print(x, y)  # Hello World

튜플이나 리스트의 요소 개수와 변수 개수가 일치해야 정상적으로 언패킹이 가능하다. 만약 개수가 다르면 오류가 발생한다.

numbers = (1, 2)
a, b, c = numbers  # ValueError: not enough values to unpack (expected 3, got 2)

3. *를 활용한 가변 언패킹

만약 언패킹할 요소 개수가 가변적이라면, *를 사용하여 남은 요소들을 리스트로 받을 수 있게 해준다.

# 앞의 두 값은 각각 할당하고, 나머지는 리스트로 받기
numbers = (1, 2, 3, 4, 5)
a, b, *rest = numbers
print(a, b, rest)  # 1 2 [3, 4, 5]

# 중간의 값들을 리스트로 받기
first, *middle, last = numbers
print(first, middle, last)  # 1 [2, 3, 4] 5

위의 예시처럼 *변수를 사용하면 특정 요소만 개별 변수에 할당하고 나머지는 리스트로 묶을 수 있게된다.


4. 함수에서의 패킹과 언패킹 활용

함수에서도 패킹과 언패킹을 활용하면 가변 인자 처리를 쉽게 할 수 있게 해준다.

(1) 가변 인자 *args를 활용한 패킹
def add(*numbers):
    return sum(numbers)  # 모든 입력값을 더하기

print(add(1, 2, 3))  # 6
print(add(4, 5, 6, 7))  # 22

*args는 여러 개의 입력값을 튜플로 패킹하여 함수 내에서 사용할 수 있도록 해준다.

(2) 키워드 가변 인자 **kwargs를 활용한 패킹

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

# 여러 개의 키워드 인자 전달

print(greet(name="Alice", age=25, city="Seoul"))
# name: Alice
# age: 25
# city: Seoul

**kwargs는 여러 개의 키워드 인자를 딕셔너리로 패킹하여 처리할 수 있도록 해준다.

(3) 리스트/튜플 언패킹을 활용한 함수 호출

def multiply(a, b, c):
    return a * b * c

nums = (2, 3, 4)
print(multiply(*nums))  # 24  (튜플 언패킹)

nums_list = [1, 5, 6]
print(multiply(*nums_list))  # 30 (리스트 언패킹)

*nums처럼 리스트나 튜플을 언패킹하여 개별 요소를 함수 인자로 전달할 수 있게 해준다.

(4) 딕셔너리 언패킹을 활용한 함수 호출

def introduce(name, age, city):
    print(f"이름: {name}, 나이: {age}, 도시: {city}")

data = {"name": "Bob", "age": 30, "city": "New York"}
introduce(**data)
# 이름: Bob, 나이: 30, 도시: New York

**data를 사용하면 딕셔너리의 키-값 쌍을 개별 인자로 전달할 수 있게 해준다.


5. Pythonic하게 패킹과 언패킹 활용하기

Python에서는 패킹과 언패킹을 적극 활용하면 코드의 가독성과 효율성이 향상된다.

(1) 변수 교환(Swap)
a, b = 10, 20
b, a = a, b  # Python에서는 이렇게 한 줄로 Swap 가능!
print(a, b)  # 20 10
(2) 다중 반환 값 처리
def get_point():
    return 3, 7  # 튜플 반환 (자동 패킹)

x, y = get_point()  # 자동 언패킹
print(x, y)  # 3 7
(3) 반복문에서 언패킹 활용
tuple_list = [(1, 'one'), (2, 'two'), (3, 'three')]

for num, word in tuple_list:
    print(num, word)
# 1 one
# 2 two
# 3 three

# 회고..

"Python의 패킹과 언패킹을 공부하면서 내가 이미 자연스럽게 사용하고 있었다는 걸 깨달았다.

하지만 그 개념을 정확히 몰랐을 뿐, 실제로 코드에서 자주 활용하고 있었던 것이다.

특히!! *args, kwargs, 리스트 컴프리헨션, 튜플 언패킹 등의 문법이 단순한 편의 기능이 아니라, Pythonic한 코드 작성을 위한 강력한 도구라는 걸 알게 되었다.

그리고 사람들이 그렇게 'Pythonic'을 강조하는 이유도 이제야 이해가 된다.

결국 Pythonic하다는 건, Python이 제공하는 직관적이고 가독성 좋은 기능을
최대한 활용하여 'Python답게' 코드를 짜는 것이라는 걸 깨달았다!" 🚀

0개의 댓글