[TypeScript] 자료 구조로 담아내기. #0

Photo by Clint Adair on Unsplash

[TypeScript] 자료 구조로 담아내기. #0

직접 구현하지 않더라도 내부적으로 많은 자료 구조가 활용되고 있습니다. 예를 들면 컴퓨터 과학에서 배열은 전통적으로 메모리 연속적인 구조를 가집니다. 하지만 일반적으로 고수준 프로그래밍 언어에서 배열 객체는 내부적으로 이러한 구조를 가지지 않습니다. 이는 전통적 배열 구조가 가진 몇몇 단점 때문입니다.

배열의 특정 위치에 새로운 요소를 삽입해야 한다고 합시다. 이때 메모리 연속적인 구조를 유지하기 위해서는 해당 위치 뒤에 존재하는 모든 요소를 뒤로 밀어야 합니다. 만약 이러한 구조를 그대로 수용한다면 쓰기가 빈번한 시스템에는 매우 큰 부담이 될 것입니다. 어떠한 자료 구조든 간에 이러한 한계를 가지고 있기 나름입니다. 따라서 실제로는 여러 활용 사례에 맞춰 적합한 자료 구조를 선택해야 하는 것이지요.

대부분 프로젝트에서 자료 구조를 직접 구현하는 경우는 흔치 않을 것으로 예상합니다. 그럼에도 자료 구조 학습은 여러분에게 많은 아이디어를 가져다줄 것입니다. 본 시리즈는 대표적으로 활용되는 여러 자료 구조를 직접 구현해 보면서 유용한 아이디어를 얻어가는 것을 목표로 합니다. 물론 직접 구현해야 하는 상황도 대비할 수도 있을 것입니다. 만약 이러한 상황이 되어도 재밌겠네요!

마지막으로 대표적인 자료 구조에 대해 간략히 소개하는 것으로 본 포스트를 마치도록 하겠습니다. 본 시리즈가 흥미로운 시간이 되기를 바랍니다!

배열

배열은 가장 기본적인 자료 구조입니다. 각 요소가 메모리에 순서대로 저장되어 있어 모든 자료 구조를 통틀어 개별 요소에 대한 가장 빠르게 접근이 장점입니다. 그에 반해 쓰기 작업에서 큰 비용이 발생한다는 단점이 있습니다.

연결 리스트

연결 리스트연결된 자료 구조 중 가장 기본적인 형태입니다. 삽입과 삭제 시 여러 요소를 당기거나 밀어낼 필요 없이 빠르게 수행할 수 있는 것이 장점입니다. 그에 반해 배열과 달리 순서로 요소에 바로 접근할 수 없어 개별 요소 접근에 큰 비용이 발생한다는 단점이 있습니다.

이진 탐색 트리

이진 탐색 트리는 정렬된 형태의 이진 트리입니다. 읽기와 쓰기 모두를 매우 빠른 속도로 수행할 수 있다는 장점이 있습니다. 다만 이는 트리의 균형이 충분히 유지되어야 하므로 이를 위해 추가적인 비용을 감수해야 할 수도 있습니다.

해시 테이블

해시 테이블은 일반적으로 가장 빠른 자료 구조로 생각할 수 있습니다. 배열을 기반으로 하는데 요소를 인덱스에 대응하기에 모든 연산을 가장 빠르게 수행할 수 있는 장점이 있습니다. 다만 순서를 보장하지 않는다는 단점이 있습니다. 또 요소와 인덱스 간 1:1 대응을 보장할 수 없어 충돌 상황에 대한 대처가 필요할 수 있습니다.

시리즈는 다음 편에 계속됩니다. 읽어주셔서 감사합니다!

묻고 답하기

개인적인 판단에 의해 적절하다고 여겨지는 경우, 모두가 볼 수 있도록 이곳에 문답이 추가됩니다. 그렇지 않더라도 질문에 대한 답변은 별도로 이루어집니다.