배열은 같은 타입의 데이터를 연속된 메모리 공간에 순차적으로 저장하는 선형 자료구조다. 인덱스를 통해 각 요소에 직접 접근할 수 있다.
아파트 복도의 호실들
연산 | 시간 복잡도 | 설명 |
---|---|---|
접근 (Access) | O(1) | 인덱스를 통한 직접 접근 |
검색 (Search) | O(n) | 선형 검색 필요 |
삽입 (Insert) | O(n) | 중간 삽입 시 요소들을 이동 |
삭제 (Delete) | O(n) | 중간 삭제 시 요소들을 이동 |
// 배열 생성
const arr1 = [1, 2, 3, 4, 5];
const arr2 = new Array(5); // 크기가 5인 빈 배열
const arr3 = Array.from({length: 5}, (_, i) => i + 1);
// 기본 연산
arr1[0]; // 접근: O(1)
arr1.indexOf(3); // 검색: O(n)
arr1.push(6); // 끝에 삽입: O(1)
arr1.unshift(0); // 앞에 삽입: O(n)
arr1.splice(2, 0, 2.5); // 중간 삽입: O(n)
arr1[10] = 'z'; // 중간 인덱스들은 자동으로 undefined
// 여러 타입을 하나의 배열에 저장
const mixedArray = ['문자열', 42, true, null, {name: '객체'}, [1, 2, 3]];
const arr = [1, 2, 3];
arr.push(4); // 길이 증가
arr.pop(); // 길이 감소
arr.length = 10; // 직접 길이 설정
const sparse = [1, , , 4]; // 인덱스 1, 2는 비어있음
console.log(sparse.length); // 4
console.log(sparse[1]); // undefined
// 기본 타입 배열
const numbers: number[] = [1, 2, 3];
const strings: Array<string> = ['a', 'b', 'c'];
// 다양한 타입을 Union 타입으로 명시
const typedArray: (string | number | boolean)[] = ['문자', 13, false];
// 튜플 (고정 크기, 다양한 타입)
const tuple: [string, number, boolean] = ['hello', 42, true];
// 읽기 전용 배열
const readonlyArr: readonly number[] = [1, 2, 3];
// 컴포넌트 리스트 렌더링
const items = ['사과', '바나나', '오렌지'];
const itemElements = items.map((item, index) => (
<li key={index}>{item}</li>
));
// 상태 배열 관리
const [todos, setTodos] = useState([]);
const addTodo = (todo) => setTodos([...todos, todo]);
const removeTodo = (index) => setTodos(todos.filter((_, i) => i !== index));