JavaScript

[JavaScript] 자료구조

댕주 2024. 11. 16. 21:34

1. 배열 (Array)

  • 순서가 있는 데이터의 집합으로, 인덱스를 통해 데이터에 접근한다
  • 길이가 동적으로 변하며, 다양한 데이터 타입을 포함할 수 있다

주요 메서드

  • push(), pop(): 끝에 요소 추가/제거
  • shift(), unshift(): 앞에 요소 추가/제거
  • slice(), splice(): 특정 범위의 요소를 복사하거나 수정
  • map(), filter(), reduce(): 데이터 변환 및 처리
const arr = [1, 2, 3];
arr.push(4); // [1, 2, 3, 4]
const doubled = arr.map(x => x * 2); // [2, 4, 6, 8]

2. 객체 (Object)

  • 키-값 쌍으로 데이터를 저장하는 구조
  • 키는 문자열이나 심볼, 값은 어떤 타입이든 가능하다

주요 메서드

  • Object.keys(): 모든 키를 배열로 반환
  • Object.values(): 모든 값을 배열로 반환
  • Object.entries(): 키-값 쌍 배열 반환
const obj = { name: 'Alice', age: 25 };
obj.job = 'Developer'; // { name: 'Alice', age: 25, job: 'Developer' }
console.log(obj.name); // 'Alice'

3. 맵 (Map)

  • 키-값 쌍으로 데이터를 저장하지만, Object 와는 달리 문자열 외의 값 (객체, 함수 등) 도 사용할 수 있다
  • 순서를 유지하며 반복(iterable)이 가능하다

주요 메서드

  • set(key, value): 키-값 쌍 추가
  • get(key): 키에 해당하는 값 반환
  • has(key): 키 존재 여부 확인
  • delete(key), clear(): 요소 삭제
const map = new Map();
map.set('name', 'Alice');
map.set(42, 'The Answer');
console.log(map.get(42)); // 'The Answer'

4. 셋 (Set)

  • 유일한 값들의 집합을 저장하며, 중복을 허용하지 않는다
  • 순서를 유지하며 반복(Iterble) 가능하다

주요 메서드

  • add(value): 값 추가
  • has(value): 값 존재 여부 확인
  • delete(value), clear(): 요소 삭제
const set = new Set([1, 2, 2, 3]);
set.add(4); // {1, 2, 3, 4}
console.log(set.has(2)); // true

 

5. 문자열 (String)

  • 문자의 연속으로, 불변(immutable) 하다
  • 배열처럼 인덱스로 접근이 가능하다

주요 메서드

  • charAt(index): 특정 위치 문자 반환
  • slice(), substring(): 부분 문자열 반환
  • split(), join(): 문자열 분리/결합
const str = "Hello, World!";
console.log(str.charAt(0)); // 'H'
console.log(str.slice(0, 5)); // 'Hello'

6. 약한 맵 (WeakMap)

  • Map과 비슷하지만, 키가 반드시 객체여야 하며, 키는 약하게 참조된다
  • 자동으로 메모리에서 삭제(Garbage Collection)된다

주요 메서드

  • set(key, value), get(key), has(key), delete(key)
let obj = {};
const weakMap = new WeakMap();
weakMap.set(obj, 'Some Value');
obj = null; // weakMap에서 obj가 사라짐

7. 약한 셋(WeakSet)

  • Set과 비슷하지만, 값이 반드시 객체여야 하며, 값은 약하게 참조된다

주요 메서드

  • add(value), has(value), delete(value)
let obj = { key: 'value' };
const weakSet = new WeakSet();
weakSet.add(obj);
obj = null; // weakSet에서 obj가 사라짐

8. 스택과 큐

스택 (Stack):

  • 후입선출 (LIFO) 구조
  • 배열을 사용하여 구현 가능
  • push() 로 추가, pop() 으로 제거

큐 (Queue):

  • 선입선출 (FIFO) 구조
  • 배열로 구현하며, push()shift() 사용
// 스택
const stack = [];
stack.push(1); // [1]
stack.push(2); // [1, 2]
stack.pop();   // 2

// 큐
const queue = [];
queue.push(1); // [1]
queue.push(2); // [1, 2]
queue.shift(); // 1

9. 데크 (Deque)

  • 양쪽에서 삽입과 삭제가 가능한 큐
  • 배열로 구현하며 push(), pop(), unshift(), shift() 사용
const deque = [];
deque.push(1);    // [1]
deque.unshift(0); // [0, 1]
deque.pop();      // [0]

10. 트리 및 그래프 (Tree & Graph)

  • JavaScript에는 트리나 그래프가 기본적으로 제공되지는 않지만, 객체와 배열을 조합하여 구현 가능하다
// 간단한 트리
const tree = {
  value: 1,
  children: [
    { value: 2, children: [] },
    { value: 3, children: [{ value: 4, children: [] }] }
  ]
};

// 그래프
const graph = {
  A: ['B', 'C'],
  B: ['A', 'D'],
  C: ['A', 'D'],
  D: ['B', 'C']
};

 

 

'JavaScript' 카테고리의 다른 글

[JavaScript] jQuery 이벤트 메서드  (0) 2024.11.17
[JavaScript] jQuery  (3) 2024.11.17
[JavaScript] 리터럴 정규식과 RegExp 객체  (1) 2024.11.16
[JavaScript] 정규식  (0) 2024.11.16
[JavaScript] this  (2) 2024.11.10