Lesson 9

배열 다루기

4 min Views 1

배열 생성, 인덱스 접근, 추가/삭제/검색 등 핵심 메서드를 배우고 스프레드 연산자와 구조분해로 배열을 다루는 현대적 패턴을 익힌다.

배열 — 순서 있는 데이터 컬렉션

배열은 여러 값을 순서대로 저장하는 자료구조입니다. 자바스크립트 배열은 타입이 혼합되어도 되고, 크기가 동적으로 변합니다. 인덱스는 0부터 시작합니다.

배열 생성

// 리터럴 (권장)
const fruits = ["apple", "banana", "cherry"];
const mixed = [1, "hello", true, null, { id: 1 }];
const empty = [];

// Array 생성자 (잘 안 씀)
const arr = new Array(3);        // [empty × 3]
const arr2 = new Array(1, 2, 3); // [1, 2, 3]
Array.from({ length: 5 }, (_, i) => i); // [0, 1, 2, 3, 4]
Array.from("Hello");             // ["H", "e", "l", "l", "o"]
Array.of(1, 2, 3);               // [1, 2, 3]

인덱스 접근과 기본 프로퍼티

const fruits = ["apple", "banana", "cherry"];

fruits[0]            // "apple"
fruits[2]            // "cherry"
fruits[fruits.length - 1] // "cherry" (마지막 요소)
fruits.at(-1)        // "cherry" (ES2022, 음수 인덱스 지원)
fruits.at(-2)        // "banana"
fruits.length        // 3

fruits[10]           // undefined (범위 초과 → 에러 없음)

추가/삭제 메서드

const arr = [1, 2, 3];

// 끝에 추가/삭제
arr.push(4, 5);     // [1, 2, 3, 4, 5], 반환값: 새 길이
arr.pop();          // [1, 2, 3, 4], 반환값: 5 (제거된 요소)

// 앞에 추가/삭제 (느림 — 모든 인덱스 재배치)
arr.unshift(0);     // [0, 1, 2, 3, 4], 반환값: 새 길이
arr.shift();        // [1, 2, 3, 4], 반환값: 0

// splice — 삽입/삭제/교체 (원본 변경)
const colors = ["red", "green", "blue"];
colors.splice(1, 1);               // ["green"] 반환, 원본: ["red", "blue"]
colors.splice(1, 0, "yellow");     // 삽입: ["red", "yellow", "blue"]
colors.splice(0, 2, "pink", "gray"); // 교체

검색 메서드

const nums = [10, 20, 30, 20, 40];

nums.indexOf(20)         // 1 (첫 번째 위치)
nums.lastIndexOf(20)     // 3 (마지막 위치)
nums.indexOf(99)         // -1 (없으면 -1)
nums.includes(30)        // true
nums.includes(99)        // false

// find — 조건에 맞는 첫 번째 요소 반환
const users = [{id: 1, name: "Kim"}, {id: 2, name: "Lee"}];
users.find(u => u.id === 2);    // {id: 2, name: "Lee"}
users.find(u => u.id === 99);   // undefined

// findIndex — 조건에 맞는 첫 번째 인덱스
users.findIndex(u => u.id === 2); // 1

// findLast / findLastIndex (ES2023)
[1, 2, 3, 2].findLast(n => n === 2); // 2 (뒤에서부터)

정렬과 변환

// sort (원본 변경, 주의!)
[3, 1, 4, 1, 5].sort();         // [1, 1, 3, 4, 5] — 숫자 정렬은 문자열 변환 후
[10, 9, 100].sort();            // [10, 100, 9] 잘못됨!

// 올바른 숫자 정렬
[10, 9, 100].sort((a, b) => a - b);  // [9, 10, 100] 오름차순
[10, 9, 100].sort((a, b) => b - a);  // [100, 10, 9] 내림차순

// 객체 배열 정렬
const people = [{name: "Lee", age: 30}, {name: "Kim", age: 25}];
people.sort((a, b) => a.age - b.age); // 나이 오름차순

// reverse (원본 변경)
[1, 2, 3].reverse(); // [3, 2, 1]

// join
["a", "b", "c"].join("-");   // "a-b-c"
["a", "b", "c"].join("");    // "abc"
["a", "b", "c"].join(", ");  // "a, b, c"

슬라이싱과 연결

const arr = [0, 1, 2, 3, 4, 5];

// slice (원본 유지, 새 배열 반환)
arr.slice(1, 4)    // [1, 2, 3] (1 이상 4 미만)
arr.slice(3)       // [3, 4, 5]
arr.slice(-2)      // [4, 5] (뒤에서 2개)
arr.slice()        // [0, 1, 2, 3, 4, 5] (얕은 복사)

// concat
[1, 2].concat([3, 4], [5])  // [1, 2, 3, 4, 5]

// flat — 중첩 배열 평탄화
[1, [2, 3], [4, [5, 6]]].flat()    // [1, 2, 3, 4, [5, 6]]
[1, [2, 3], [4, [5, 6]]].flat(2)   // [1, 2, 3, 4, 5, 6]
[1, [2, [3, [4]]]].flat(Infinity)  // [1, 2, 3, 4]

스프레드 연산자와 배열

const a = [1, 2, 3];
const b = [4, 5, 6];

// 배열 합치기
const merged = [...a, ...b];      // [1, 2, 3, 4, 5, 6]
const withExtra = [0, ...a, 3.5, ...b]; // [0, 1, 2, 3, 3.5, 4, 5, 6]

// 배열 복사 (얕은 복사)
const copy = [...a];
copy.push(99);
console.log(a); // [1, 2, 3] — 원본 영향 없음

// 함수 인수로 전달
Math.max(...[3, 1, 4, 1, 5, 9]); // 9

구조분해 할당

const [first, second, ...rest] = [1, 2, 3, 4, 5];
console.log(first);  // 1
console.log(second); // 2
console.log(rest);   // [3, 4, 5]

// 건너뛰기
const [,, third] = [1, 2, 3];
console.log(third); // 3

// 기본값
const [x = 10, y = 20] = [5];
console.log(x, y); // 5, 20

// 변수 교환 (스왑)
let p = 1, q = 2;
[p, q] = [q, p];
console.log(p, q); // 2, 1

관련 검색어  ·  자바스크립트 배열, 배열 메서드, push pop splice, 스프레드 연산자, 배열 구조분해, Array.from

채용정보
공지사항
인사이트
MY