❓ 자료구조(Data Structure)란?
자료구조란 여러 데이터들의 묶음을 저장하고, 사용하는 방법을 정의한 것입니다.
개발 과정에서 데이터를 가지고 전처리 하는 방식들, 기능(함수)를 구현하는 것들 모두 자료구조라고 할 수 있습니다.
그러나 그 방법들 중에서도 효율적인 방식이 존재하는데 그것들을 정의한 것이 자료구조입니다.
사전적 의미로는 자료(Data)의 집합을 의미하며, 각 원소들이 논리적으로 정의된 규칙에 의해 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 표현한 것이라고 합니다.
❓ 왜 필요한가?
그렇다면 자료구조는 왜 필요한 것일까요?
그 이유로는 자료구조를 익힘으로서 효율적으로 데이터를 다루어 문제를 해결하기 위함이 1순위일 것입니다.
잘 선택된 자료구조는 실행시간을 단축시켜주거나 메모리 용량의 절약을 이끌어 낼 수 있습니다.
- 데이터를 체계적으로 저장하고, 효율적으로 활용하기 위해서 자료구조를 사용
- 대부분의 자료구조는 특정한 상황에 놓인 문제를 해결하는 데에 특화되어 있습니다.
⭕ 자료구조의 선택 기준
- 자료의 처리 기간(시간 복잡도)
- 자료의 크기(공간 복잡도)
- 자료의 활용 빈도
- 자료의 갱신 정도
- 프로그램의 용이성
❗ 자료구조의 특징
✅ 효율성
위에서 말했듯 자료구조를 사용하는 목적은 효율적인 데이터 관리 및 사용입니다. 따라서 적절한 자료구조를 선택하여 사용한다면 업무(시간적, 공간적)의 효율이 올라갈 것입니다.
예를 들어 100만개의 데이터가 존재할 때 선형 탐색(Linear Search)의 경우 시간 복잡도가 O(N)이므로 운이 없다면 100만개의 데이터를 전부 탐색해야 하는 문제가 생깁니다. 그러나 만약 이분 탐색(Binary Search)를 활용한다면 이분 탐색의 시간 복잡도는O(logN)이므로 약 20번만에 탐색을 완료할 수 있습니다.
이와 같이 목적에 맞는 자료구조를 사용하게 됨으로써 보다 효율적인 업무를 수행할 수 있게 됩니다.
✅ 추상화
추상화란 복잡한 자료, 모듈, 시스템 등으로 부터 핵심적인 개념만 간추려 내는 것입니다. 자료 구조를 구현할 때 중요한 것은 어느 시점에 데이터를 삽입할 것이며, 어느 시점에 이러한 데이터를 어떻게 사용할 것인지에 대해서 초점을 맞출 수 있기 때문에 구현 외적인 부분에 더 시간을 쏟을 수 있습니다.
알고리즘 자체에는 중점을 두지 않습니다. 어떻게 구현했는지 보다 어떻게 사용해야 하는지를 알고 있는게 중요한 것입니다.
예를 들어 스택(Stack)의 경우 먼저 들어간 것이 나중에 나오는 FILO(First In Last Out)의 형태를 가지고 있습니다. push() 함수를 이용해서 데이터를 삽입할 수 있고, pop() 함수를 이용해서 데이터를 추출할 수 있습니다. 여기서 내부 구현 코드는 사람마다 달라지고, 사용 언어, 개발 툴 등 환경적인 변수에 따라서 또 달라질 것이기에 추상적인 개념만 이해하고 있다면 원하는 자료구조를 선택해서 사용할 수 있을 것입니다.
✅ 재사용성
자료구조를 설계할 때에는 특정 프로그램에서만 동작하게 설계하지 않습니다. 다양한 프로그램에서 동작할 수 있도록 범용성 있게 설계하기 때문에 해당 프로젝트가 아닌 다른 프로젝트에서도 사용할 수 있습니다.
❗ 자료구조의 분류
자료구조는 크게 선형 자료구조와 비선형 자료구조로 나뉩니다. 선형 자료구조의 경우 데이터가 일렬로 나열되어 있는 것을 뜻하고, 비선형 자료구조는 특정한 형태를 띄고 있는 것을 뜻합니다.
💠 선형 구조
- 배열(Array)
- 연결 리스트(Linked List)
- 스택(Stack)
- 큐(Queue)
💠 비선형 구조
- 트리(Tree)
- 그래프(Graph)
'프론트엔드 면접 질문 > 자료구조와 알고리즘' 카테고리의 다른 글
[자료구조] 트리(Tree)의 개념과 종류 (0) | 2024.03.29 |
---|---|
[자료구조] 그래프(Graph)의 탐색 및 구현 (0) | 2024.03.29 |
[자료구조] 그래프(Graph)의 개념 (0) | 2024.03.29 |
[자료구조] 스택(Stack)과 큐(Queue) (0) | 2024.03.27 |
[자료구조] 자료구조의 종류와 분류 (0) | 2024.03.27 |