본문 바로가기

Library/C/C++

자체 데이터 컬렉션

가끔씩, 표준 라이브러리에서 기본적인 데이터 컬렉션을 제공함에도 불구하고 각각의 라이브러리가 자체적으로 그런 컬렉션을 제공하는 것이 의아스러울 때가 있었다. 정적으로 링크한다고 하더라도 당시로서는 작은 크기(기껏해야 몇 백 KB?)라고 생각했기 때문이었다.

그렇지만, 코드의 크기와 속도에 신경쓰기 시작하면서, 특히 라이브러리를 만드는데 있어서 표준 라이브러리의 컬렉션을 사용하는 것은 심각한 두통거리가 되었다. 몇 백 KB가 엄청나게 큰 크기라는 것을 깨닫기 시작한 것이다. 그러면서, 각각의 라이브러리에서 벡터, 리스트, 맵과 같은 컬렉션을 자체적으로 제공하는게 이해되었다. 표준 라이브러리에서 호환성 좋고 많은 기능을 제공한다고 하더라도 추가적인 그 크기는 무시할 수 없는 요소이기 때문이었다. (그러면서 크기에 둔감했던 시절을 깊이 반성하게 되었다)

사실, 클라이언트 코드를 작성하는 경우라면 이런 것은 큰 문제가 되지 않는다. 원하는 기능은 사용하는 라이브러리나 표준 라이브러리에서 제공할 것이므로, 클라이언트 코드를 작성하는 경우, 이러한 컬렉션까지 직접 작성하는 것은 시간 낭비이고, 어차피 링크되는 경우가 허다하기 때문이다.

그렇지만, 라이브러리 코드를 작성하는 경우라면, 다른 라이브러리를 링크하여 크기를 키우는 것이 맞지 않을 때가 있다. 그 라이브러리의 기능만 필요한 클라이언트가 필요없는 다른 코드와 함께 링크되어 몸집이 불어나야 하는가? 또, 표준 라이브러리에서 제공하는 기능들은 그야말로 일반적인 경우를 위해 작성된 것이므로, 최대의 성능을 발휘해야 부분에서 잘 동작하지 않을 수도 있다.

만약, 그런 정도의 라이브러리를 작성해야 하는 수준이라면, 사치스럽게만 느껴지던 '맞춤형 자체 컬렉션'이 현실적인 문제로 다가올 것이다.