slice() 함수는 배열이나 문자열의 일부를 추출하여 새로운 배열이나 문자열을 반환하는 메서드이다. 원본 데이터를 변경하지 않는 안전한 방법으로 데이터를 다룰 수 있어 매우 유용하다.
array.slice(start, end)
string.slice(start, end)
매개변수:
start(선택): 추출을 시작할 인덱스. 기본값은 0이다.end(선택): 추출을 끝낼 인덱스(해당 인덱스는 포함되지 않음). 생략하면 끝까지 추출한다.반환값: 추출된 요소를 포함한 새로운 배열 또는 문자열
const fruits = ['apple', 'banana', 'cherry', 'date', 'elderberry'];
// 인덱스 1부터 3까지 추출 (3은 포함 안 함)
console.log(fruits.slice(1, 3));
// ['banana', 'cherry']
// 처음부터 2개 추출
console.log(fruits.slice(0, 2));
// ['apple', 'banana']
// 인덱스 2부터 끝까지 추출
console.log(fruits.slice(2));
// ['cherry', 'date', 'elderberry']
// 원본은 변경되지 않음
console.log(fruits);
// ['apple', 'banana', 'cherry', 'date', 'elderberry']
음수를 사용하면 배열의 끝에서부터 역순으로 계산한다.
const numbers = [1, 2, 3, 4, 5];
// 마지막 2개 요소 추출
console.log(numbers.slice(-2));
// [4, 5]
// 마지막에서 2개 앞까지 추출
console.log(numbers.slice(0, -2));
// [1, 2, 3]
// 두 번째에서 마지막 전까지 추출
console.log(numbers.slice(1, -1));
// [2, 3, 4]
배열 복사하기:
const original = [1, 2, 3];
const copy = original.slice(); // 또는 [...original]
copy.push(4);
console.log(original); // [1, 2, 3]
console.log(copy); // [1, 2, 3, 4]
배열의 마지막 N개 요소 가져오기:
const data = [10, 20, 30, 40, 50];
// 마지막 3개
const lastThree = data.slice(-3); // [30, 40, 50]
페이징 구현:
const items = ['a', 'b', 'c', 'd', 'e', 'f'];
const pageSize = 2;
const pageNumber = 1; // 두 번째 페이지
const start = pageNumber * pageSize;
const end = start + pageSize;
const page = items.slice(start, end); // ['c', 'd']
const text = 'Hello, World!';
// 인덱스 0부터 5까지
console.log(text.slice(0, 5));
// 'Hello'
// 인덱스 7부터 끝까지
console.log(text.slice(7));
// 'World!'
// 마지막 6개 문자
console.log(text.slice(-6));
// 'World!'
파일 확장자 추출:
const filename = 'document.pdf';
const extension = filename.slice(-3); // 'pdf'
URL의 도메인 부분 추출:
const url = 'https://example.com/page';
const domain = url.slice(8, 19); // 'example.com'
텍스트 미리보기 만들기:
function preview(text, length) {
if (text.length > length) {
return text.slice(0, length) + '...';
}
return text;
}
console.log(preview('JavaScript은 강력한 언어입니다', 10));
// 'JavaScript...'
JavaScript에는 유사한 메서드들이 있다. 차이점을 이해하는 것이 중요하다.
const arr = ['a', 'b', 'c', 'd'];
// slice() - 원본 변경 없음
const sliced = arr.slice(1, 3); // ['b', 'c']
console.log(arr); // ['a', 'b', 'c', 'd']
// splice() - 원본 변경함
const spliced = arr.splice(1, 2); // ['b', 'c']
console.log(arr); // ['a', 'd']
문자열에서 substring()도 비슷하지만 약간의 차이가 있다.
const text = 'JavaScript';
// slice() - 음수 인덱스 지원
console.log(text.slice(-4)); // 'ript'
// substring() - 음수는 0으로 처리
console.log(text.substring(-4)); // 'JavaScript'
const nested = [[1, 2], [3, 4]];
const copy = nested.slice();
copy[0][0] = 999;
console.log(nested[0][0]); // 999 - 내부 배열은 복사되지 않음
function processData(arr) {
// 함수 내에서 배열을 수정해도 원본은 안전
const working = arr.slice();
working.pop();
return working;
}
const original = [1, 2, 3];
const result = processData(original);
console.log(original); // [1, 2, 3] - 변경 안 됨
...)나 Array.from()도 고려하자.slice()를 사용하자.slice() 함수는 JavaScript에서 배열과 문자열을 안전하게 다루는 필수적인 도구다. 원본 데이터를 보호하면서 필요한 부분만 추출할 수 있어, 함수형 프로그래밍과 불변성을 추구하는 현대적 JavaScript 개발에 매우 중요하다. 음수 인덱스, 페이징, 데이터 처리 등 다양한 상황에서 활용할 수 있으니 자주 연습해보자.