공통적으로 자료구조와 자료형은 컴퓨터 과학에서 모두 데이터를 다루기 위한 개념이지만, 서로 다른 목적과 역할을 가지고 있다.
Data Type
자료형은 변수나 값의 종류를 정의하는 개념이다.
컴퓨터 메모리에 어떻게 저장될지와 그 값에 대해 어떤 연산이 가능한지를 결정한다.
Primitive Data Type (a.k.a. 원시 자료형, 기본 자료형)
프로그래밍 언어에서 제공하는 기본적인 데이터 형식
- Number 숫자형 (int, float, double...)
- BigInt
- String 문자형
- Boolean 불리언 (true, false)
- Null : 아무런 값 자체가 없는 자료형
- Undefined : 변수가 정의되어 있지 않거나, 할당되지 않은 상태
- Symbol
Reference Data Types (a.k.a. 참조 자료형)
객체나 배열처럼 메모리 상의 다른 위치를 참조하는 자료형
- Object (객체) 얕은 복사와 깊은 복사
- Array (배열)
Data Structure
자료구조는 데이터를 저장, 관리, 그리고 효율적으로 접근할 수 있는 방식이나 구조를 의미한다.
자료형은 데이터의 기본적인 형태를 정의하지만, 자료구조는 그 데이터를 어떻게 조직하고 효율적으로 접근할지에 대한 규칙과 방법을 제공하는 개념이다.
Linear Data Structures (선형 자료구조)
데이터가 일렬로 배치되어 있는 구조로 되어 있다.
각 요소는 이전 요소와 다음 요소와 *선형 관계를 가진다.
- Array (배열)
인덱스를 통해 데이터에 접근할 수 있는 구조 - Linked List (연결 리스트)
포인터를 통해 다음 노드를 가리키는 노드들로 구성된 구조 - Stack (스택)
LIFO(Last In First Out) 원칙에 따라 작동하는 구조 - Queue (큐)
FIFO(First In First Out) 원칙에 따라 작동하는 구조
Non-linear Data Structures (비선형 자료구조)
데이터가 계층적이거나 특정 패턴을 따르는 구조
각 요소 간의 관계가 선형적이지 않다.
- Tree (트리)
계층적인 구조로, 루트 노드부터 시작하여 자식 노드가 연결되는 구조 - Graph (그래프)
정점과 간선으로 이루어진 복잡한 관계를 표현하는 구조
관계를 나타내는 데 적합하며, 네트워크, 지도, SNS의 연결 관계 등을 표현할 때 유용하다. - Heap (힙)
트리 기반의 자료구조, 최댓값이나 최솟값을 빠르게 찾는 데 사용
Hash Data Structures (해시 자료구조)
https://sihanni.tistory.com/57
- Hash Table (해시 테이블)
키 값을 통해 빠르게 데이터를 찾을 수 있도록 하는 구조 - Map (맵)
키-값 쌍을 저장하고, 키를 통해 값을 빠르게 조회할 수 있는 구조
| 구분 | Map | Hash |
| 구현 방식 | 일반적으로 트리 또는 리스트로 구현 | 해싱을 통해 인덱스를 사용하여 저장 |
| 순서 유지 | 삽입 순서를 유지 | 순서를 보장하지 않음 |
| 검색 속도 | 순차 검색이 필요할 수 있음 | 해시 함수로 빠른 검색이 가능 |
| 키의 자료형 | 다양한 자료형을 지원 | 일반적으로 고정된 해시 가능한 자료형 |
정리
| 구분 | 자료형 (Data Type) | 자료구조 (Data Structure) |
| 정의 | 데이터 성격(숫자, 문자열, 불리언 등)을 정의 | 데이터를 저장하고 조직하는 구조와 방식 |
| 종류 | 기본자료형(숫자, 문자열..), 참조 자료형(객체 등) | 배열, 연결리스트, 스택, 큐, 트리, 그래프 등 |
| 목적 | 값의 종류와 연산 방식을 결정 | 데이터의 효율적인 관리 및 검색, 삽입, 삭제 등의 작업을 최적화 |
| 연산 가능성 | 자료형에 따라 가능한 연산이 정해져 있다. | 자료구조는 데이터를 저장하고 접근하는 방법을 최적화 |
| 메모리 관리 | 자료형은 메모리 크기를 결정하고, 변수에 맞는 공간을 할당 | 자료구조는 메모리 관리 및 데이터 저장 방식에 집중 |
왜 알아야 하는가
다양한 자료구조는 서로 다른 데이터 및 상황에서 최적의 성능을 제공한다.
빠르게 검색이 필요한 경우 해시 테이블이 적합하다던지, 데이터의 순서와 유지나 탐색이 중요하다면 트리 구조가 유리하다는 것을 아는 것과 모르는 것의 차이는 상당할 수 밖에 없다.
따라서 문제를 효율적으로 해결하기 위해 데이터의 특성에 맞는 자료구조를 이해하고 사용할 수 있어야한다.
주석
*선형적 : 일방향적임을 뜻함
*
'BackEnd' 카테고리의 다른 글
| nestJS 실시간 채팅 앱 - [9] logging (winston) (0) | 2024.12.09 |
|---|---|
| 서버 모니터링 (feat. prometheus, grafana) (0) | 2024.12.08 |
| 웹소켓 연결 관리 (NestJS) (3) | 2024.11.28 |
| nestJS MongoDB 연결 및 사용하기 (0) | 2024.11.25 |
| Proxy (프록시) (0) | 2024.11.06 |