최근 바이트 배열을 다룰 일이 생기면서 Data, NSData를 사용한 적이 있다.
앞으로 파일을 압축하거나 해제할 때 또는 네트워크 통신할 때 사용할 일이 또 생길 거 같아서 이참에 기록해야지~~

이름으로 알다시피 NSData는 Objective-C의 Foundation 프레임워크에서 제공되는 클래스입니다. Swift에서도 사용 가능하며, 특히 Objective-C와의 호환성이 필요한 상황에서 자주 사용됩니다.
NSData는 기본적으로 불변(immutable)입니다. 데이터를 생성한 후에는 수정할 수 없으며, 수정이 필요하다면 가변(NSMutable) 버전인 NSMutableData를 사용해야 합니다.
NSData는 클래스로 구현되어 있습니다. 참조 타입으로, 객체를 복사해도 동일한 데이터를 참조합니다. 이로 인해 복사 비용이 낮지만, 메모리 관리에 주의가 필요합니다.
압축 및 압축 해제 기능을 제공하고 있습니다.
let data = NSData(contentsOfFile: "path/to/file")
let compressedData = data?.compressed(using: .zlib)
let compressedData = NSData(contentsOfFile: "path/to/compressedFile")
let decompressedData = compressedData?.decompressed(using: .zlib)

Data는 Swift의 표준 라이브러리에서 제공하는 구조체입니다. NSData와 같은 역할을 수행하면서도, Swift 환경에 최적화되어 있습니다.
Data는 기본적으로 가변(mutable)과 불변(immutable)의 두 가지 형태를 모두 지원합니다. 값 타입(value type)이며, 필요에 따라 데이터를 수정할 수 있습니다.
Data는 값 타입으로, 데이터를 복사할 때 객체가 복제됩니다. 이로 인해 데이터의 수정이 다른 인스턴스에 영향을 미치지 않습니다.
Data는 NSData와 상호 변환이 가능하며, 필요에 따라 NSData로 변환하여 참조 타입으로 사용할 수 있습니다.