Skip to main content

Command Palette

Search for a command to run...

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

Updated
2 min read
[TypeScript] 자료 구조로 담아내기. #0

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

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

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

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

배열

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

연결 리스트

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

이진 탐색 트리

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

해시 테이블

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

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

묻고 답하기

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

More from this blog

[TypeScript] 자료 구조로 담아내기. #14 - 연결 리스트(with. 이중 연결)

이번 편은 이전 편으로부터 이어집니다. 연결 리스트의 또 다른 형태는 이중 연결 리스트입니다. 후임자의 참조만 저장하는 단일 연결 리스트와 달리 이중 연결 리스트는 선임자의 참조도 함께 저장합니다. interface DoublyLinkedListNode<T> extends DoublyLinkedList<T> { linkBefore(succ: DoublyLinkedListNode<T>): void; linkAfter(pred: D...

May 3, 20253 min read9
[TypeScript] 자료 구조로 담아내기. #14 - 연결 리스트(with. 이중 연결)

[TypeScript] 자료 구조로 담아내기. #12 - 연결 리스트(with. null 노드)

이번 편은 이전 편으로부터 이어집니다. 조금 예리하신 분들은 이전 편에서 다룬 헤드 노드만으로는 충분치 않다는 것을 느끼셨을 것입니다. 최소한 첫 노드에 예외를 부여하는 상황은 피했으나 후임자가 null임을 확인하는 구현 또한 만족스럽지는 않습니다. 카이로의 코끼리 카이로의 코끼리에 대해 알고 계십니까? 링크를 통해 확인하실 수 있습니다. 꽤 재밌으므로 한번 읽어 보시길 추천합니다. 여기서 중요한 아이디어는 끝 위치에 미리 코끼리를 둔다는 것...

Apr 19, 20252 min read12
[TypeScript] 자료 구조로 담아내기. #12 - 연결 리스트(with. null 노드)

[TypeScript] 자료 구조로 담아내기. #11 - 연결 리스트(with. 헤드 노드)

이번 편은 이전 편으로부터 이어집니다. 이전 편에서는 연결 리스트의 접근자는 첫 노드의 선임자가 적절하다는 것을 알았습니다. 얼핏 보기엔 문제없어 보이는데 어떤가요? 최상위 연결 리스트 즉, 가장 처음에 위치한 노드로 시작하는 경우를 생각해 봅시다. 가장 처음에 위치한 노드의 선임자는 무엇인가요? 맞습니다. 선임자가 존재하지 않겠지요. 그럼 어떻게 해야 할까요? 선임자를 가지지 않는 첫 노드를 갖는 연결 리스트에 대해 예외를 적용해야 할까요?...

Apr 12, 20252 min read13
[TypeScript] 자료 구조로 담아내기. #11 - 연결 리스트(with. 헤드 노드)

고라니드로의 블로그

47 posts