자료구조 (Data Structure)
: 데이터를 저장하는 방법
- 데이터를 어떻게 저장하고 활용할지에 대한 개념
[ 자료구조의 종류 ]
# 기본 자료구조
- 배열 (Array) → 순서가 있는 데이터 리스트
- 객체 (Object) → 키-값 쌍으로 이루어진 데이터 저장 방식
# 고급 자료구조
- 집합 (Set) → 중복을 허용하지 않는 데이터 모음, 생성자 함수로만 만들 수 있다.
- 맵 (Map) → 키-값 쌍을 저장하지만, 키에 다양한 타입 사용 가능, 생성자 함수로만 만들 수 있다.
- 스택 (Stack) → LIFO(Last In First Out) 구조
- 큐 (Queue) → FIFO(First In First Out) 구조
- 링크드 리스트 (Linked List) → 노드들이 포인터로 연결된 구조
- 트리 (Tree) → 계층적인 데이터 구조
- 그래프 (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에서 내장된 생성자 함수들은 특정한 데이터 구조를 가진 객체를 만들 때 사용한다.
[ 생성자 함수의 종류 ]
# 기본 생성자 함수 (내장 객체)
- new Object() → 빈 객체 생성
- new Array() → 배열 생성
- new Function() → 새로운 함수 생성
- new String() → 문자열 객체 생성
- new Number() → 숫자 객체 생성
- new Boolean() → 불리언 객체 생성
# 자료구조와 관련된 생성자 함수
- new Set() → 집합(Set) 생성
- new Map() → 맵(Map) 생성
- new WeakSet() → 참조를 약하게 유지하는 Set 생성
- 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 |