Javascript

[JS] 자료구조, 생성자 함수

Yujzu 2025. 3. 6. 16:49

 

자료구조 (Data Structure)

: 데이터를 저장하는 방법

- 데이터를 어떻게 저장하고 활용할지에 대한 개념

 

[ 자료구조의 종류 ]

# 기본 자료구조

  1. 배열 (Array) → 순서가 있는 데이터 리스트
  2. 객체 (Object) → 키-값 쌍으로 이루어진 데이터 저장 방식

# 고급 자료구조

  1. 집합 (Set) → 중복을 허용하지 않는 데이터 모음, 생성자 함수로만 만들 수 있다.
  2. 맵 (Map) → 키-값 쌍을 저장하지만, 키에 다양한 타입 사용 가능, 생성자 함수로만 만들 수 있다.
  3. 스택 (Stack) → LIFO(Last In First Out) 구조
  4. 큐 (Queue) → FIFO(First In First Out) 구조
  5. 링크드 리스트 (Linked List) → 노드들이 포인터로 연결된 구조
  6. 트리 (Tree) → 계층적인 데이터 구조
  7. 그래프 (Graph) → 노드와 간선으로 이루어진 구조

# 선형 데이터 구조 (Linear Data Structures)

데이터가 일렬로 나열된 형태로, 순차적으로 접근할 수 있는 구조.

스택 & 큐

공통점 : 순서를 유지하면서 데이터를 저장하는 자료구조

차이점 : 데이터를 저장하는 방식과 꺼내는 순서가 다름

# 스택(Stack)

: LIFO(Last In, First Out) 원칙을 따르는 자료구조 , 입출구가 하나

스택(stack) = 쌓는다.

예: 책을 쌓을 때, 가장 위에 있는 책을 먼저 꺼냄

[ 특징 ]

1. 후입선출, 나중에 들어온 데이터가 먼저 나감

2. 주요 연산 : 

- push(): 데이터 삽입
- pop(): 데이터 제거(꺼내기)
- peek(): 가장 위 요소 확인

3. 사용 하는 곳 :

- 실행 취소 (undo) 기능

- 웹 브라우저 방문 기록 (뒤로 가기)

- 수식 계산 ( 괄호 검사, 후위 표기법)

- 함수 호출 관리 (콜 스택)

- 재귀 함수 호출

 

[ 코테문제 유형 ]

최근에 삽입한 데이터를 대상으로 연산이 필요할 때

isFull(), isEmpty() 를 length 를 활용하여 판단한다. => length 를 활용한 조건문 작성

push(), pop() 메서드를 활용한다.

 

 

# 큐(Queue)

: FIFO(First In, First Out) 원칙을 따르는 자료구조, 입출구가 따로

queue = 줄을 서다, 대기

예: 은행 줄 서기, 버스 정류장 대기열

[ 특징 ]

1. 선입선출, 먼저 들어온 데이터가 먼저 나감 

2. 주요 연산 :

- enqueue(): 데이터 삽입
- dequeue(): 데이터 제거
- peek(): 가장 앞 요소 확인

3. 사용 하는 곳

- 프린트 작업 대기열

- 프로세스 스케줄링

- 네트워크 요청 처리

- 이벤트 루프의 콜백 큐


[ 코테문제 유형 ]

자바스크립트는 큐를 지원하지 않는다.

push(), shift() 사용하여 흉내내기

shift() : 배열의 가장 첫 번째 요소를 삭제하는 메서드


생성자 함수 (Constructor Function)

: 객체를 생성하는 함수

- JavaScript에서 내장된 생성자 함수들은 특정한 데이터 구조를 가진 객체를 만들 때 사용한다.

 

[ 생성자 함수의 종류 ]

# 기본 생성자 함수 (내장 객체)

  1. new Object() → 빈 객체 생성
  2. new Array() → 배열 생성
  3. new Function() → 새로운 함수 생성
  4. new String() → 문자열 객체 생성
  5. new Number() → 숫자 객체 생성
  6. new Boolean() → 불리언 객체 생성

# 자료구조와 관련된 생성자 함수

  1. new Set() → 집합(Set) 생성
  2. new Map() → 맵(Map) 생성
  3. new WeakSet() → 참조를 약하게 유지하는 Set 생성
  4. new WeakMap() → 참조를 약하게 유지하는 Map 생성

 

** "자료구조"는 데이터의 구조적 개념, "생성자 함수"는 해당 구조를 구현하고 객체로 만드는 방법

자료구조 & 생성자 함수 정리

 

  • 데이터를 저장하고 관리하는 구조인가? → 자료구조
  • 특정한 기능을 수행하는가? → 기능성 객체

 

구분 자료구조 (데이터 저장) 기능성 객체 (특정 기능 제공)
배열 new Array()
객체 new Object()
집합(Set) new Set()
맵(Map) new Map()
날짜(Date) new Date()
정규식(RegExp) new RegExp()
에러(Error) new Error()
숫자(Number) new Number() (잘 안 씀)
문자열(String) new String() (잘 안 씀)
불리언(Boolean) new Boolean() (잘 안 씀)
약한 집합(WeakSet) new WeakSet()
약한 맵(WeakMap) new WeakMap()
프라미스(Promise) new Promise()
XHR(XMLHttpRequest) new XMLHttpRequest()
파일 객체(File, Blob) new File(), new Blob()
반응형 Proxy new Proxy()
데이터 뷰(DataView) new DataView()

 


1. new Set()

: 중복되지 않는 값들의 집합을 관리

배열처럼 여러 값을 저장하지만 중복된 값은 저장하지 않는다.

 

[ 특징 ]

1. 중복된 값이 저장되지 않음

- 동일한 값을 여러 번 추가해도 한 번만 저장됨

 

2. 값의 순서 보장

- 값을 추가한 순서대로 저장한다.

- 하지만 인덱스를 사용하여 접근할 수는 없음

 

[ 주요 메서드 ]

  • add(value) : 값 추가
  • delete(value) : 값 삭제
  • has(value) : 값이 존재하는지 확인
  • clear() : 모든 값 삭제
  • size : Set의 요소 개수

 

[ 사용 예시 ]

 

1. 중복 제거

const set = new Set([1, 2, 3, 3, 4]);
console.log([...set]); // [1, 2, 3, 4]

 

2. 특정 값이 존재하는지 확인

const set = new Set([1, 2, 3]);
console.log(set.has(2)); // true

 

 

2. new Map()

: 해시맵

키-값 저장이 필요할 때

let map = new Map();
map.set("name", "Alice");
map.set("age", 25);
console.log(map.get("name")); // Alice

 

 

3. new Array()

: 생성자 함수를 이용한 배열 생성 방법

let arr1 = new Array(5);  // 길이가 5인 빈 배열 생성
let arr2 = new Array(1, 2, 3);  // [1, 2, 3] 배열 생성
  • new Array(5) → [empty × 5] (비어있는 5칸짜리 배열)
  • new Array(1, 2, 3) → [1, 2, 3]
  • 주의! new Array(5) 는 [5] 가 아니라 길이가 5인 빈 배열이 생성됨!
let arr = new Array(10).fill(0); // 길이 10짜리 배열을 0으로 채움
console.log(arr); // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  • 특정 값으로 초기화된 배열이 필요할 때 사용

 

4. new Date()

: 날짜 계산

const today = new Date(); // 현재 날짜
const targetDate = new Date("2025-02-27"); // 비교할 날짜
  • new Date()를 사용하면 현재 날짜를 가져올 수 있음.
  • new Date("YYYY-MM-DD") 형식으로 특정 날짜를 생성할 수 있음.

[ new Date()의 메서드 ]

New Date().getFullYear() // 4자리 연도를 반환 (예: 2025)

 

 

 

5. new RegExp()

: 정규 표현식

 

 


# 생성자 (Constructor)

: 객체를 생성하는 데 사용되는 함수 또는 메서드

- 객체 지향 프로그래밍에서 클래스의 인스턴스를 생성할 때 호출되는 특별한 메서드

 

** 인스턴스(instance): 특정 클래스에서 생성된 객체

 

[ 특징 ]

- 자동 호출 : 보통 new 키워드로 호출하여 객체를 생성한다.

- 초기화 : 객체를 만들고, 그 객체가 가져야 할 기본 속성(프로퍼티)들의 초기값을 설정한다.

- 반환값 없음: this의 값을 저장, 및 자동으로 반환이 되어서 반환값이 불필요하다

 

 

# 생성자 함수 예시

- 일반적인 function을 사용하여 객체를 생성

// 생성자 함수
function Person(name, age) {
  this.name = name;
  this.age = age;
}

// 생성자 함수 호출
const person1 = new Person("Alice", 25);
console.log(person1); // { name: "Alice", age: 25 }

 

# 클래스 생성자 예시

- class 문법에서 constructor 메서드로 정의

// 클래스 생성자
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
}

// 클래스 생성자 호출
const person2 = new Person("Bob", 30);
console.log(person2); // { name: "Bob", age: 30 }

'Javascript' 카테고리의 다른 글

[JS] DOM  (0) 2025.03.07
렌더링 방식 CSR, SSR  (0) 2025.03.07
JSON  (1) 2025.03.05
깊은 복사, 얕은 복사  (0) 2025.03.02
[JS] Babel , Polyfill  (0) 2025.02.16