본 내용은 프로그래머스의 코딩테스트 광탈 방지 A to Z : JavaScript 강의를 토대로 작성하였습니다.
1. 배열이란?
- 순차 리스트라고도 불림
- 연관된 데이터를 연속적인 형태로 구성
- 배열의 원소는 순서 대로 번호(index)가 붙음
2. 배열의 특징
- 고정된 크기를 가짐
- 보통은, 동적으로 크기를 늘릴 수 없음
- 반면, JS와 같은 스크립트 언어는 동적으로 크기가 증감
- index를 사용하여 해당 index에 해당하는 원소에 접근할 수 있음
- 상수시간이 걸림(O(1))
- 원소를 삭제하면, 해당 index의 자리는 비게 됨
- 빈 자리를 채우기 위해서 뒤의 요소들 하나하나를 순차적으로 앞으로 당겨 채우게 됨
- 삭제 후 순서를 맞추려면 O(n)이 소요됨
- 배열의 요소를 추가하는 경우도 이와 같아, O(n)이 소요 됨
- 추가와 삭제가 반복되는 로직이면 배열을 사용하지 말 것!
- 탐색이 많을 때 유리
3. JavsScript에서의 배열
- JavaScript 배열은 동적임
- 동적으로 크기를 늘릴 수 있음
- Hash Map에 가까움
- index가 number가 아니어도 됨
- 숫자, 문자, 논리값이 들어갈 수 있음
- length가 내부적으로 관리 됨
- 배열은 객체와 동일
- typeof 연산자의 결과가 object
- 특수한 객체 취급
- 객체처럼 key-value의 형태로 item을 넣을 수 있음(length 는 변화하지 않음)
생성 방법
// 1. 배열 리터럴
const exampleArray1 = [];
// 2. 배열 생성자 함수 사용(new 키워드는 생략 가능)
// 생성 시, 전달한 number만큼의 length를 가지는 배열이 생성됨
// fill: 배열의 모든 요소에 정적인 값을 채우는 배열 프로토타입 메서드
const exampleArray2 = Array(10).fill(0);
// 3. 로직을 사용하여 배열 생성
// from: 유사 배열 객체나 반복 가능한 객체를 얕게 복사해 새로운 배열을 만드는 정적 메서드
const exampleArray3 = Array.from({length: 10}, (_, i) => i);
배열 요소 추가, 삭제
const exampleArray = [1, 2, 3];
// 1. 배열의 끝에 요소 추가(O(1))
exampleArray.push(4);
// 2. 특정 인덱스에 요소 추가(O(n))
// splice: 특정 인덱스에 요소를 추가, 삭제하는 메서드
// 선형 시간을 가짐
exampleArray.splice(4, 0, 5);
// 3. 특정 인덱스 요소 제거(O(n))
exampleArray.splice(4, 1);
// 4. 끝 요소 제거
exampleArray.pop();
// 5. 첫 요소 추가
exampleArray.unshift(1);
// 6. 첫 요소 제거
exampleArray.shift();
기타 메서드
// 1. 배열을 문자열로 변환
const exampleStirng =[1, 2, 3, 4, 5].join(",");
// 2. 배열을 거꾸로 하기(원본 배열을 변형)
const exampleArray = [1, 2, 3, 4, 5];
exampleArray.reverse();
// 3. 두 배열 합치기
const mergeArray1 = [1, 2, 3];
const mergeArray2 = [4, 5, 6];
const mergedArray = mergeArray1.concat(mergeArray2);
// 4. 배열 잘라내기(원본 배열을 변경하지 않음)
const slicedArray = exampleArray.slice(2, 4);
배열 순회
- for문을 사용하는 것이 일반적
- for of 문을 사용하면 배열의 각 요소를 변수에 담아 접근 가능(직관적)
const exampleArray = [1, 2, 3, 4, 5];
// 1. for문을 사용한 순회
for (let i = 0; i < exmapleArray.length; i++){
console.log(exampleArray[i]);
}
// 2. for of 문을 사용한 순회
for (const item of exampleArray) {
console.log(item);
}
Reference
'programming study > Computer Science' 카테고리의 다른 글
자료구조와 알고리즘 - 연결 리스트 (0) | 2022.09.13 |
---|---|
자료구조와 알고리즘 - 객체 (0) | 2022.09.11 |
자료구조와 알고리즘 - 자료구조와 알고리즘이란, 자료구조의 종류, 시간 복잡도 (0) | 2022.09.09 |
Queues & Stacks (0) | 2021.11.26 |
Hash Table (0) | 2021.11.25 |