![[자바스크립트(Java Script)]3.자바스크립트 불변성: 배열 다루기](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog%3Ftitle%3D%255B%25EC%259E%2590%25EB%25B0%2594%25EC%258A%25A4%25ED%2581%25AC%25EB%25A6%25BD%25ED%258A%25B8%28Java%2520Script%29%255D3.%25EC%259E%2590%25EB%25B0%2594%25EC%258A%25A4%25ED%2581%25AC%25EB%25A6%25BD%25ED%258A%25B8%2520%25EB%25B6%2588%25EB%25B3%2580%25EC%2584%25B1%253A%2520%25EB%25B0%25B0%25EC%2597%25B4%2520%25EB%258B%25A4%25EB%25A3%25A8%25EA%25B8%25B0%2520%26logoUrl%3Dhttps%253A%252F%252Finblog.ai%252Finblog_logo.png%26blogTitle%3Dsson17&w=2048&q=75)
자바스크립트 배열은 기본적으로 가변적(mutable)입니다. 즉, 생성 후에도 변경이 가능합니다. 하지만 예상치 못한 부작용을 방지하기 위해 불변성(immutability)을 유지하고 싶은 상황이 많습니다. 이 글에서는 원본 데이터를 변경하지 않고 배열을 다루는 일반적인 방법들을 살펴보겠습니다.
//불변
let list = [1,2,3];
//1.깊은 복사
let deepcopy = [...list]; //...전개연산자
deepcopy.push(4);
console.log("list",list);
console.log("deepcopy",deepcopy);
//2. 추가
let appendList = [...list,4];
let preperList = [0,...list];
console.log("appendList",appendList);
console.log("preperList",preperList);
//3.찾기
let searchList = list.filter((n)=>n==2);
console.log("searchList",searchList);
//4.삭제
let deleteList = list.filter((n)=>n!=2);
console.log("deleteList",deleteList);
//5.수정
let updateList = list.map((n)=>{
if(n==2){
return n*10;
}else{
return n;
}
});
// let updateList = list.map((n)=> n==2 ? n*10 : n);
console.log("updateList",updateList);
1. 깊은 복사(Deep Copy)
배열을 직접 수정하지 않기 위해 가장 먼저 해야 할 일은 배열의 복사본을 만드는 것입니다.
자바스크립트에서 깊은 복사를 쉽게 수행하는 방법은 /전개 연산자(…)를 사용하는 것입니다.
let list = [1, 2, 3];
// 전개 연산자를 사용한 깊은 복사
let deepcopy = [...list];
deepcopy.push(4);
console.log("list", list); // [1, 2, 3] - 원본은 변경되지 않음
console.log("deepcopy", deepcopy); // [1, 2, 3, 4]
전개 연산자(
...
)는 원본 배열의 모든 요소를 포함하는 새로운 배열을 생성하여 참조 연결을 끊어줍니다.2. 배열에 요소 추가하기
배열에 새로운 요소를 추가할 때 push()를 사용하면 원본 배열이 변경됩니다.
대신, 새 배열을 반환하는 전개 연산자(
...
)를 활용하는 것이 좋습니다.let list = [1, 2, 3];
// 끝에 요소 추가
let appendList = [...list, 4];
// 처음에 요소 추가
let prependList = [0, ...list];
console.log("appendList", appendList); // [1, 2, 3, 4]
console.log("prependList", prependList); // [0, 1, 2, 3]
3. 배열에서 요소 찾기 (filter
활용)
배열에서 특정 요소를 찾을 때
filter()
를 활용하면 불변성을 유지하면서 새로운 배열을 생성할 수 있습니다.let list = [1, 2, 3];
// 2와 동일한 모든 요소 찾기
let searchList = list.filter((n) => n === 2);
console.log("searchList", searchList); // [2]
4. 배열에서 요소 삭제하기
filter()
를 사용하여 특정 요소가 없는 새 배열을 만들 수 있습니다:
let list = [1, 2, 3];
// 요소 2가 없는 새 배열 생성
let deleteList = list.filter((n) => n !== 2);
console.log("deleteList", deleteList); // [1, 3]
5. 배열 요소 수정하기 (map
활용)
map()
메서드는 제공된 함수를 모든 요소에 호출한 결과로 새 배열을 생성합니다:
let list = [1, 2, 3];
// 값이 2인 요소 업데이트 (10을 곱함)
let updateList = list.map((n) => {
if (n === 2) {
return n * 10;
} else {
return n;
}
});
console.log("updateList", updateList); // [1, 20, 3]
이는 조건부(삼항) 연산자를 사용하여 더 간결하게 작성할 수도 있습니다:
// 동일한 결과, 더 간결한 구문
let updateList = list.map((n) => n === 2 ? n * 10 : n);
Share article