파이썬 bytearray() 사용법 및 1가지 주의사항

파이썬 bytearray() 함수를 통해 바이트 배열의 특성을 유지하면서도 가변적인 이진 데이터를 효율적으로 처리할 수 있습니다. 즉, 바이트 배열을 문자열이나 리스트처럼 데이터를 쉽게 조작할 수 있습니다. 이번 포스팅에서는 bytearray() 함수의 사용법을 알아보고, 그 활용 방안과 주의할 점들을 자세히 살펴보겠습니다.

파이썬 bytearray()란?

bytearray()는 파이썬에서 제공하는 가변 길이의 바이트 시퀀스입니다. 바이트 배열은 기본적으로 이진 데이터를 다루며, 문자열처럼 데이터 조작이 가능합니다. bytes와는 달리 변경이 가능하다는 점에서 큰 차이점을 보입니다.

bytearray() 기본 사용법

bytearray()는 여러 가지 방식으로 생성할 수 있습니다. 가장 간단한 방법은 빈 바이트 배열을 생성하는 것입니다.

Python
b = bytearray()
print(b)

빈 배열 외에도 다른 자료형을 바이트 배열로 변환할 수도 있습니다.

Python
b = bytearray("Hello", "utf-8")
print(b)

b = bytearray([72, 101, 108, 108, 111])
print(b)

문자열 “Hello”를 바이트 배열로 변환한 것과 아스키 코드 값으로 구성된 리스트를 bytearray(b’Hello’)로 변환한 결과는 아래와 같습니다.

그림 1. 파이썬 bytearray()로 바이트 배열 생성하기
그림 1. 파이썬 bytearray()로 바이트 배열 생성하기

이처럼 bytearray()는 다양한 자료형을 입력으로 받을 수 있으며, 각각을 바이트 배열로 변환해 줍니다.

바이트 배열 조작하기

bytearray()는 가변형 자료형이므로 데이터를 변경할 수 있습니다. 예를 들어, 바이트 배열의 특정 인덱스에 있는 값을 바꾸거나 추가할 수 있습니다.

바이트 배열 값 수정

리스트처럼 특정 인덱스의 값을 변경할 수 있습니다. 다만, 각 값은 0~255 범위의 정수여야 한다는 점을 기억해야 합니다.

Python
b = bytearray(b'Hello')
b[1] = 97
print(b)
그림 2. 파이썬 바이트 배열의 값 수정하기
그림 2. 파이썬 바이트 배열의 값 수정하기

바이트 배열에 값 추가하기

리스트와 마찬가지로 append() 함수를 사용하여 바이트 배열의 끝에 값을 추가할 수 있습니다.

Python
b.append(33)
print(b)
그림 3. 파이썬 바이트 배열에 값 추가하기
그림 3. 파이썬 바이트 배열에 값 추가하기

또한 extend()를 사용하면 여러 개의 값을 한 번에 추가할 수도 있습니다.

Python
b.extend([32, 87, 111, 114, 108, 100])
print(b)
그림 4. 파이썬 바이트 배열에 extend() 메서드로 여러 값 추가하기
그림 4. 파이썬 바이트 배열에 extend() 메서드로 여러 값 추가하기

문자열과의 변환

bytearray()는 주로 이진 데이터를 다루기 때문에 문자열과의 변환이 필수적입니다. 이를 위해 decode()encode() 메서드를 사용할 수 있습니다.

바이트 배열을 문자열로 변환

바이트 배열을 문자열로 변환할 때는 decode()를 사용합니다. 이 때 어떤 인코딩을 사용할지 명시해주어야 합니다. 가장 일반적인 인코딩 방식은 ‘utf-8’입니다.

Python
b = bytearray(b'Hello')
s = b.decode('utf-8')
print(s)
그림 5. 파이썬 bytearray.decode() 메서드를 사용하여 바이트 배열을 문자열로 변환
그림 5. 파이썬 bytearray.decode() 메서드를 사용하여 바이트 배열을 문자열로 변환

문자열을 바이트 배열로 변환

반대로 문자열을 utf-8로 인코드하여 바이트 배열로 변환하려면 encode()를 사용합니다.

Python
s = "Hello"
b = bytearray(s.encode('utf-8'))
print(b)

주의사항: 바이트 범위

bytearray()의 각 요소는 0에서 255 사이의 값이어야 합니다. 이 범위를 벗어난 값을 추가하거나 변경하려고 하면 오류가 발생합니다.

Python
b = bytearray(b'Hello')
b[0] = 300

다음과 같이 “ValueError: byte must be in range(0, 256)” 오류 메시지를 통해서 0~255의 값을 사용할 것을 알려줍니다. 따라서 바이트 배열을 다룰 때는 항상 이 범위 내에서 값을 설정해야 합니다.

그림 6. 파이썬 bytearray에서 값 변경 범위 벗어날 때 발생하는 ValueError
그림 6. 파이썬 bytearray에서 값 변경 범위 벗어날 때 발생하는 ValueError

bytearray()의 활용

bytearray()는 주로 네트워크나 파일 입출력에서 이진 데이터를 처리할 때 유용합니다. 예를 들어, 네트워크 소켓에서 받은 데이터를 처리하거나 바이너리 파일을 읽고 쓸 때 자주 사용됩니다.

파일 읽기와 바이트 배열

바이너리 파일을 읽을 때 bytearray()를 사용하여 데이터를 처리할 수 있습니다.

Python
with open("example.bin", "rb") as file:
    data = bytearray(file.read())
    print(data)

이진 파일을 처리하는 상황에서는 bytearray()의 가변적인 특성을 활용해 데이터를 효율적으로 조작할 수 있습니다.

정리

파이썬 bytearray()는 이진 데이터를 가변적으로 처리할 수 있는 강력한 도구입니다. 문자열처럼 데이터를 조작할 수 있으면서도 바이트 배열의 특성을 유지할 수 있어 메모리 효율이 높고, 네트워크나 파일 입출력 등에서 특히 유용합니다. 바이트 범위 제한과 같은 몇 가지 주의사항만 기억한다면 다양한 용도로 활용할 수 있는 매우 유용한 자료형입니다.

이를 통해 이진 데이터를 보다 효율적으로 처리할 수 있으니, 꼭 한번 활용해 보시기 바랍니다.

참고자료

관련 포스트

Leave a Comment