작게 담는 기술, 압축
긴 짐을 가방에 넣을 때, 같은 옷을 둘둘 말아 작게 만들어 넣은 적 있죠. 버린 건 하나도 없는데 자리는 덜 차지해요. 데이터도 똑같이 할 수 있어요. 같은 정보를 그대로 두면서 담는 자리만 줄이는 것, 이게 압축이에요.
반복을 줄여요
앞에서 정보가 0과 1, 비트로
자리를 차지한다는 걸 봤어요.
자리를 덜 차지하게 담을 수 있다면
같은 정보를 더 작게 둘 수 있겠죠.
가장 쉬운 솜씨는 반복 줄이기예요.
같은 글자가 줄줄이 이어질 때
그걸 하나하나 다 적지 않고
무엇이 몇 번 반복되는지만 적어요.
AAAA 는 A 가 네 번, 이렇게요.
반복된 글자 묶음을 눌러봐요. 줄줄이 적힌 게 무엇이 몇 번 반복인지로 줄고, 길이가 짧아져요.
긴 묶음이 짧게 줄었죠.
버린 글자는 하나도 없어요.
무엇이 몇 번인지만 적었을 뿐이에요.
그래서 다시 펼치면 원래대로예요.
반복이 많을수록 더 많이 줄어요.
그런데 같은 글자가 줄줄이 있는 게 아니라
같은 조각이 여기저기 흩어져 있다면
그건 어떻게 줄일 수 있을까요?
패턴을 짧게
흩어진 반복도 줄일 수 있어요.
자주 나오는 긴 조각을 찾아서
거기에 짧은 코드를 하나 정해 줘요.
그러면 긴 조각이 나올 때마다
그 짧은 코드로 바꿔 적어요.
코드가 무엇을 뜻하는지는
한쪽에 표로 적어 두면 돼요.
자주 나오는 것일수록 효과가 커요.
많이 바꿀수록 많이 줄어드니까요.
자주 나오는 조각을 눌러 짧은 코드를 배정해봐요. 그 조각이 코드로 바뀌며 전체 길이가 줄어요.
긴 조각이 짧은 코드로 바뀌니
전체가 눈에 띄게 줄었죠.
반복을 줄이는 것도, 짧은 코드를 주는 것도
결국 같은 마음이에요.
같은 정보를 더 적은 자리에 담는 거죠.
그런데 이렇게 줄여 놓고 나면
나중에 원래 내용이 필요할 텐데
다시 펼치면 정말 그대로 돌아올까요?
되돌리면 원본 그대로
압축의 가장 든든한 약속이에요.
작게 줄였다가 다시 펼치면
글자 하나 틀리지 않고 원본이 돌아와요.
버린 게 없으니 당연하죠.
A 네 번은 다시 AAAA 가 되고
짧은 코드는 다시 긴 조각이 돼요.
이렇게 하나도 잃지 않는 압축을
무손실이라고 불러요.
글이나 프로그램처럼 한 글자도
틀리면 안 되는 것들에 꼭 맞아요.
압축본을 눌러 펼쳐봐요. 줄였던 게 원래 글자로 풀리고, 원본과 똑같은지 나란히 확인해요.
펼친 것과 원본이 딱 맞았죠.
작게 담아도 잃은 게 없어요.
그래서 마음 놓고 압축해 두었다가
필요할 때 그대로 되살릴 수 있어요.
그렇다면 늘 최대한 세게
압축하면 되는 걸까요?
사실 거기엔 맞바꾸는 게 하나 있어요.
무엇과 무엇을 맞바꾸는지 볼까요?
더 작게 vs 시간
압축에는 세기를 고를 수 있어요.
살살 압축하면 빠르지만 덜 작아지고
세게 압축하면 더 작아지지만
압축하고 푸는 데 시간이 더 들어요.
반복과 패턴을 더 꼼꼼히 찾을수록
작아지지만 그만큼 품이 드니까요.
그래서 정답은 상황마다 달라요.
자리가 아쉬우면 세게,
빨라야 하면 살살 고르면 돼요.
압축 세기를 골라 눌러봐요. 세게 갈수록 크기는 더 작아지지만 걸리는 시간은 더 길어지는 맞바꿈이 보여요.
크기와 시간이 서로 당기는 게 보였죠.
둘 다 가질 수는 없어요.
더 작게 담으면 그만큼 더 기다리고
빨리 끝내면 그만큼 덜 작아져요.
그래서 압축은 골라 쓰는 도구예요.
오래 보관할 거면 세게,
자주 열어 볼 거면 살살.
자, 이제 전체를 한 번 정리해봐요.
정리해볼까요
한 줄로 모으면 이래요.
압축은 같은 정보를 더 작게 담아요.
반복은 무엇이 몇 번인지로 줄이고
자주 나오는 조각엔 짧은 코드를 줘요.
되돌리면 원본 그대로라 잃는 게 없어요.
더 세게 압축하면 더 작지만
시간이 더 드니 상황 따라 골라요.
작게 담되 되돌리면 그대로,
그게 압축이에요.
핵심을 차례로 눌러 되짚어봐요. (반복 줄이기 -> 자주 나오는 조각에 짧은 코드 -> 되돌리면 원본 그대로 -> 더 작게 vs 시간 맞바꿈)
이제 같은 정보를 더 작게 담는
솜씨를 손에 넣었어요.
반복을 줄이고 짧은 코드를 주는 것만으로
자리를 알뜰하게 아낄 수 있죠.
게다가 되돌리면 원본 그대로니
마음 놓고 작게 담아 둘 수 있어요.
데이터를 작게, 그러나 온전히 다루는
이 감각이 다음 이야기로 이어져요.
함께 계속 살펴봐요.