읽기 전에 알아두면 좋아요
아래 개념이 익숙하면 본문을 바로 읽으세요. 낯선 개념만 링크에서 복습하면 됩니다.
- JavaScript 배열: 인덱스 조회와 삽입·삭제 비용배열은 여러 값을 순서대로 담습니다. 인덱스로 값을 읽고 반복문으로 하나씩 살펴봅니다.
개념과 예제는 실행하지 않아도 읽을 수 있습니다. 내 컴퓨터·터미널에서 직접 실행하는 과정은 선택 실습입니다.
과정 위치와 선택 복습 안내
과정 위치: 자료구조 개념과 문제 · 자료구조 개념
과정 위치는 이 글이 속한 묶음입니다. 이 단계의 모든 개념을 먼저 읽을 필요는 없습니다. 위에 연결한 개념 중 낯선 내용만 복습하세요. 문제의 조건·상태·갱신 순서는 익숙한 언어로 설명하면 됩니다.
JavaScript로 문법·실행 복습하기 (선택)
개념 글의 코드는 JavaScript 예시입니다. 문제 화면에서는 JavaScript·Python·Java·C++·C# 중 익숙한 언어의 함수를 작성하세요. 본문의 Node.js 입출력 예시는 로컬 실행을 위한 별도 안내입니다.
배열·스택·큐·Map·Set은 자주 하는 연산에 따라 어떻게 선택하나요?
자료구조는 자주 할 동작을 기준으로 고릅니다. 순서대로 읽기는 배열, 마지막 값부터 꺼내기는 스택, 먼저 온 값부터 처리는 큐, 키 조회와 중복 확인은 Map·Set에서 시작합니다.
적용 조건·범위: 검증 범위: 위 독립 예제의 출력만 로컬에서 확인했습니다. 이 글은 독립 자료구조 실습입니다. 실제 브라우저 표시와 모든 입력·플랫폼의 실행은 검증하지 않았습니다.
본문 근거: ECMAScript Map Objects
자료구조는 “무엇을 먼저 꺼낼까?”에서 고릅니다
이름부터 외우지 않아도 됩니다. 실제로 자주 할 동작을 하나 고르면 배열·스택·큐·Map·Set 중 알맞은 출발점이 보입니다.


선수 지식: JavaScript 변수·배열·조건문을 먼저 익힙니다. 객체 참조나 함수가 낯설면 아래 단계별 예제부터 시작하고, class 전체 구현은 해당 동작을 손으로 추적한 뒤 읽습니다. 각각의 코드는 독립 실행합니다.
1. 오늘 처리할 일 세 개가 있습니다
자료구조는 여러 값을 담아 두고, 필요할 때 찾거나 꺼내기 위한 정리 방식입니다. 특별한 계산부터 배우는 것이 아니라, 같은 목록을 어떤 규칙으로 다룰지 고르는 일에서 시작합니다.

아침에 일이 다음 순서로 들어왔다고 해보겠습니다.
| 들어온 순서 | 할 일 |
|---|---|
| 1 | 메일 답장 |
| 2 | 회의 자료 |
| 3 | 버그 확인 |
같은 세 항목도 어떤 것을 먼저 꺼내려는지에 따라 알맞은 구조가 달라집니다.
| 내가 원하는 동작 | 먼저 꺼낼 값 | 출발점 |
|---|---|---|
| 두 번째 일을 바로 보고 싶다 | 회의 자료 | 배열 |
| 방금 넣은 일을 먼저 되돌린다 | 버그 확인 | 스택 |
| 먼저 들어온 일을 먼저 처리한다 | 메일 답장 | 큐 |
배열은 각 칸에 0, 1, 2처럼 번호가 있습니다. 스택은 접시를 쌓듯 마지막에 올린 것을 먼저 꺼냅니다. 큐는 줄을 서듯 먼저 들어온 것을 먼저 꺼냅니다. 지금은 어려운 용어보다 이 꺼내는 순서만 기억하면 충분합니다.
2. 손으로 한 번 따라가 봅니다
할 일이 하나씩 들어올 때 모습을 적어보겠습니다.

| 단계 | 저장된 값 | 다음에 꺼낼 값 |
|---|---|---|
| 메일 답장 추가 | [메일 답장] | 메일 답장 |
| 회의 자료 추가 | [메일 답장, 회의 자료] | 큐: 메일 답장 / 스택: 회의 자료 |
| 버그 확인 추가 | [메일 답장, 회의 자료, 버그 확인] | 큐: 메일 답장 / 스택: 버그 확인 |
| 배열의 1번 칸 조회 | 변화 없음 | 회의 자료 |
저장된 값은 같지만 질문이 다릅니다. “몇 번 칸인가?”, “가장 최근인가?”, “가장 먼저인가?” 중 무엇을 자주 묻는지가 선택 기준입니다.
3. 가장 짧은 코드로 순서를 확인합니다
아래 예제는 각각 브라우저 개발자 도구의 Console에 붙여 넣어 실행할 수 있습니다. console.log는 결과를 출력합니다. 같은 예제를 다시 실행할 때 변수 이름이 이미 선언되었다는 오류가 나오면 새로고침 후 실행하세요.

const tasks = ['메일 답장', '회의 자료', '버그 확인'];
console.log(tasks[1]);
console.log(tasks[tasks.length - 1]);
console.log(tasks[0]);
회의 자료 버그 확인 메일 답장
첫 줄은 세 값을 순서대로 배열에 담습니다. tasks[1]은 1번 칸을 읽습니다. 번호는 0부터 세므로 두 번째 값입니다. tasks.length - 1은 마지막 칸의 번호라서 가장 최근에 넣은 값을 읽습니다. tasks[0]은 가장 먼저 들어온 값입니다. 아직 값을 지우지 않았기 때문에 세 줄을 실행해도 배열은 그대로입니다.
작은 확인 문제: 새 일은 어디에서 꺼낼까요?
“전화하기”를 마지막에 추가했습니다. 최근 작업부터 되돌린다면 무엇을 먼저 꺼내야 할까요?
const work = ['메일', '회의', '전화하기'];
console.log(work[work.length - 1]);
전화하기
정답은 “전화하기”입니다. 마지막에 들어온 값을 먼저 꺼내므로 스택의 순서입니다.
4. 이름표로 자주 찾는다면 Map입니다
set은 ID 이름표와 값을 함께 저장하고, get은 그 이름표로 값을 읽습니다.

const byId = new Map();
byId.set('u1', '민수');
byId.set('u2', '수지');
console.log(byId.get('u2'));
console.log(byId.get('u9'));
수지 undefined
빈 Map을 만들고 두 이름표를 저장했습니다. u2로 읽으면 수지가 나오고, 저장하지 않은 u9로 읽으면 undefined가 나옵니다. 이 글에서는 선택 기준만 익힙니다. 자세한 메서드는 Map·Set 상세 글에서 이어집니다.
더 알아보기: ID가 겹치거나 회원이 바뀌면?
같은 ID로 set을 두 번 실행하면 나중 값이 앞 값을 덮어씁니다. ID는 겹치지 않는다는 규칙을 정하거나 저장 전에 확인해야 합니다. 별도의 회원 배열을 바꿔도 이미 만든 Map은 저절로 갱신되지 않으므로 회원 추가나 ID 변경 때 함께 고쳐야 합니다.
5. 중복을 한 번만 남기려면 Set입니다

const tags = ['자바스크립트', '배열', '자바스크립트'];
const tagSet = new Set(tags);
const uniqueTags = Array.from(tagSet);
console.log(uniqueTags.join(', '));
자바스크립트, 배열
첫 줄에는 자바스크립트가 두 번 있습니다. Set이 같은 값을 한 번만 남기고, Array.from이 다시 배열로 바꿉니다. 마지막 줄은 두 값을 쉼표로 이어 출력합니다. 등장 횟수까지 세어야 한다면 Set만으로는 부족합니다.
바로 실행해 보는 핵심 예제
독자 질문: 작업 순서를 유지하면서 중복 항목을 골라내려면 무엇을 고르나요?

왜 쓰나요? 순서가 필요한 목록은 배열, 같은 값의 중복 여부만 확인할 때는 Set을 함께 쓰면 역할이 분명합니다.
아래 바닐라 JavaScript 코드는 독립 실행 예제입니다. 본문에서 배운 개념을 새 데이터로 확인합니다. 다른 예제와 같은 콘솔에 이어 붙이지 말고 새 콘솔 또는 새 .cjs 파일에서 실행하세요.
const tasks = ["A", "B", "A"];
const ordered = [...tasks];
const unique = new Set(tasks);
console.log(ordered.join(","), [...unique].join(","));
실행 결과와 비용
이번 검토에서는 Node.js v24.18.0에서 위 독립 예제를 실행해 다음 출력과 일치하는지 확인했습니다.
A,B,A A,B
시간·공간 복잡도: 배열 복사는 O(n)입니다. Set 생성은 일반적인 해시 기반 구현에서 평균 O(n) 시간·O(n) 추가 공간, 항목 포함 확인은 보통 평균 O(1)입니다. JavaScript 표준은 특정 해시 구현을 강제하지 않습니다.
직접 풀 문제
작업 순서 A, B, A를 그대로 보이면서 유일한 제목 수를 구해 보세요.
풀이와 기대 결과
ordered는 A,B,A를 유지하고 unique.size는 2입니다. Set을 목록 자체로 대체하면 중복 작업이 사라집니다.
원자료의 다른 학습 순서 (선택)
자료구조 과정 원래 순서의 다음 글: 02 배열의 위치별 읽기·삽입·삭제 비용
검증 범위: 위 독립 예제의 출력만 로컬에서 확인했습니다. 이 글은 독립 자료구조 실습입니다. 실제 브라우저 표시와 모든 입력·플랫폼의 실행은 검증하지 않았습니다.
6. 선택표는 마지막에 확인합니다

| 가장 자주 할 일 | 먼저 살펴볼 구조 | 주의할 점 |
|---|---|---|
| 번호로 읽고 끝에 추가 | Array | 중간 삭제 때 뒤 값의 번호가 바뀜 |
| 최근 값을 먼저 꺼냄 | Stack | 중간 값 검색용은 아님 |
| 먼저 온 값을 먼저 꺼냄 | Queue | 대량 처리에서는 앞 삭제 비용도 확인 |
| ID 같은 키로 반복 조회 | Map | 중복 키와 갱신 규칙 필요 |
| 중복을 한 번만 보관 | Set | 등장 횟수는 따로 세어야 함 |
| 알고 있는 노드 사이의 연결 변경 | 연결 리스트 | 노드를 찾는 일은 처음부터 순회 |
처음에는 계산식보다 문장으로 선택해 보세요. “나는 먼저 온 일을 먼저 꺼낸다”라고 말할 수 있으면 큐를 고를 근거가 생긴 것입니다.
더 알아보기: 값이 많아지면 비용도 비교합니다
값이 몇 개 없을 때는 이해하기 쉬운 구조로 시작해도 됩니다. 값이 많아지면 한 번 처리할 때 몇 칸을 확인하는지 살펴봅니다. 배열에서 ID를 찾으면 여러 회원을 차례로 확인할 수 있지만, Map은 ID로 찾는 일을 반복하기 좋습니다. 배열 가운데를 지우면 뒤의 여러 값이 이동할 수 있습니다. 이처럼 “몇 번 찾는가?”와 “값이 얼마나 많아지는가?”를 함께 보는 것이 연산 비용으로 고르는 방법입니다.
7. 다음 글과 연습
기존 문제 배열에서 최솟값 찾기를 풀며 “모든 값을 한 번씩 확인해야 하는가?”를 생각해 보세요.
참고 자료
공식 문서 확인일: 2026년 9월 10일.
자료형·자료구조·연산 규칙을 나누어 고릅니다
숫자·문자열 같은 자료형은 다루는 값과 허용 연산을 정하고, 배열·연결 리스트 같은 자료구조는 여러 값을 저장하고 연결하는 방법을 정합니다. 스택의 LIFO나 큐의 FIFO는 값을 꺼내는 연산 규칙입니다. 따라서 “스택과 배열 중 하나”만 골라야 하는 것은 아닙니다. 배열 끝에서 넣고 꺼내는 스택도 있고 연결 노드를 앞에서 넣고 꺼내는 스택도 있습니다. 같은 규칙을 다른 저장 구조로 구현하면 연산 비용과 메모리 사용이 달라집니다.

예를 들어 되돌리기 기록은 가장 최근 작업부터 취소하므로 스택 규칙을 고르고, 그다음 배열 끝 연산과 연결 노드 구현 중 환경에 맞는 저장 방식을 선택합니다. Set의 중복 없는 집합 규칙도 해시 또는 순서 트리로 구현할 수 있습니다. “어떤 값을 저장할까 → 어떤 순서로 읽을까 → 어떤 연산이 반복될까”를 차례로 물으면 이름만 외워 선택하는 실수를 줄일 수 있습니다. 구현 이름만으로 모든 연산이 빠르다고 판단하지 말고, 자주 하는 연산의 조건과 최악 비용을 확인하세요.
이어서 공부할 개념
직접 실습: 연산 비용으로 구조를 설명합니다
실습 주제: 자료구조 선택 가이드: 연산 비용으로 배열·스택·큐·Set 고르기

- 본문 구현에서 저장되는 값과 연결 관계를 그림으로 적습니다.
- 조회·삽입·삭제 중 이 구조가 가장 자주 수행할 연산을 고릅니다.
- 연산 전후에도 유지되어야 하는 규칙을 한 문장으로 적습니다.
- 배열이나 Map 같은 다른 구조로 바꿨을 때 시간·공간 비용을 비교합니다.
풀이 기준과 확인 결과
메서드 이름만 외우지 말고 한 번의 연산에서 어떤 값과 연결이 바뀌는지 추적하세요. 빈 구조, 원소 한 개, 중복값, 연속 삽입·삭제를 실행했을 때 본문이 설명한 불변식이 유지되면 성공입니다.
테스트 체크리스트

- 빈 구조에 대한 조회·삭제 처리
- 첫 원소와 마지막 원소 변경
- 중복값 또는 동일 우선순위 처리
- 입력 크기가 커졌을 때 예상 복잡도 유지
이 글이 도움이 되었나요?
이어서 공부하기
체크포인트: 예제의 상태 변화를 손으로 추적하고 아래 문제에 적용하세요. 값이 없는 경우와 원소 하나인 경우도 설명해 보세요. 삽입·제거 전후의 상태를 그리고, 내장 도구를 쓰는 풀이와 직접 구현의 목적을 구분하세요.
이 개념으로 더 풀어보기
다음 추천 · 자료구조 개념: JavaScript Map·Set: 값 조회와 중복 제거 실습
복습 문제 보기 (선택)
앞에서 다룬 문제에 이 개념을 다시 적용해 보세요. 최솟값 구하기 풀이|배열 순회와 비교 갱신 원리
권장 순서는 학습 가이드와 같습니다. 다른 순서는 접힌 참고 목록에서 확인할 수 있습니다. 읽음 표시는 숙달이나 채점 결과가 아닙니다.
원래 과정 목록 순서 (선택)
읽음 기록
읽음 — / 전체 23개 · 필수 23개
새 글 받아보기
RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.