React 18 useDeferredValue 심화: 검색 자동완성에서 디바운싱을 제거하는 이유

React 18 useDeferredValue 심화: 검색 자동완성에서 디바운싱을 제거하는 이유

⚙️ JS 배열 메서드 3대장: map, filter, reduce 뽀개기 (React 필수 문법)

💡더 이상 for 문으로 복잡하게 배열을 다루지 마세요.
map, filter, reduce의 원리를 이해하고, 리액트 컴포넌트 안에서 깔끔하게 데이터를 가공하는 습관을 들입니다.

🔄 왜 for문을 버리고 메서드를 써야 할까?


자바스크립트 개발자라면 한 번쯤은 `for (let i = 0; i < array.length; i++)` 구문을 써보셨을 겁니다.
하지만 현대적인 개발, 특히 React에서는 이 방식이 환영받지 못합니다.
그 이유는 크게 두 가지입니다: 선언적 코드(Declarative Code)불변성(Immutability)입니다.
이 세 가지 메서드는 원본 배열을 훼손하지 않고(불변성 유지), "무엇을 할지"에만 집중하는 코드를 작성할 수 있게 돕습니다.

1️⃣ map: 배열을 '변형'할 때 사용 (React 렌더링 필수)


`map`은 배열의 각 요소를 순회하며 "1대 1로 새로운 형태로 변형"할 때 사용됩니다.
결과는 항상 원본 배열과 길이가 같은 새로운 배열입니다.
이 메서드는 리액트에서 데이터 배열을 **JSX 엘리먼트 배열**로 변환하여 화면에 목록을 렌더링할 때 필수적으로 쓰입니다.

📌 문법과 역할

// 원본: [1, 2, 3]
const newArray = numbers.map((number) => {
    return number * 2; // 새로운 요소 반환
});
// 결과: [2, 4, 6]

`map`의 콜백 함수가 반환하는 값이 새로운 배열의 요소가 됩니다.
리액트에서는 이 반환 값 자리에 `

`나 `` 같은 컴포넌트를 넣어주면 됩니다.

2️⃣ filter: 배열에서 원하는 요소만 '선택'할 때 사용


`filter`는 이름 그대로 배열에서 특정 조건을 만족하는 요소들만 **걸러내어** 새로운 배열을 생성합니다.
결과는 원본 배열보다 길이가 같거나 작은 새로운 배열입니다.
로그인한 사용자 목록만 보여주거나, 완료되지 않은 할 일만 필터링할 때 유용합니다.

📌 참(True)을 반환하면 포함!

const users = data.filter((user) => {
    return user.age >= 20; // 조건이 true인 요소만 남김
});
⚠️ 주의사항:
`filter`는 요소를 수정하는 것이 아니라, 포함할지 말지만 결정합니다.
배열 요소 자체를 바꾸고 싶다면 `map`을 사용해야 합니다.

3️⃣ reduce: 배열을 '하나의 값'으로 응축할 때 사용 (만능 도구)


`reduce`는 배열 전체를 순회하여 **최종적으로 단 하나의 값** (숫자, 객체, 배열 등 원하는 모든 형태)을 만들어냅니다.
가장 문법이 복잡하지만, `map`과 `filter`를 포함한 거의 모든 배열 작업을 `reduce`로 구현할 수 있는 **만능 도구**입니다.

📌 Accumulator (누적값) 이해하기

`reduce`는 두 가지 인자를 받습니다: 콜백 함수와 초기값(Initial Value).
특히 콜백 함수의 첫 번째 인자인 **Accumulator (누적값)**가 핵심입니다.
이 누적값에 이전 계산 결과가 계속 쌓이면서 최종 결과가 만들어집니다.

// 배열의 모든 요소 합산
const sum = numbers.reduce((acc, current) => {
    return acc + current;
}, 0); // 초기값 0

`map`과 `filter`가 필요한 상황이라면 해당 메서드를 쓰는 것이 코드를 더 직관적으로 만듭니다.
하지만 배열을 객체로 변환하거나, 요소들을 기반으로 복잡한 단일 결과를 만들어야 할 때는 reduce가 빛을 발합니다.

📝 핵심 요약: 3대장 역할 한눈에 비교


메서드 주요 목적 결과 형태
map 배열의 요소 변형 (Transformation) 원본과 길이가 같은 새 배열
filter 조건에 맞는 요소 선택 (Selection) 원본보다 짧거나 같은 새 배열
reduce 하나의 최종 값으로 응축 (Accumulation) 단일 값 (숫자, 객체, 배열 등)

🚀 실천 가이드

이 세 가지 메서드는 리액트 개발의 기본기입니다.
오늘 배운 내용을 바탕으로 간단한 할 일 목록 앱(To-do List)을 만들어 보면서,
데이터 추가(map), 삭제(filter), 전체 완료 개수 계산(reduce)을 직접 적용해 보세요.
함수형 프로그래밍의 아름다움을 느낄 수 있을 겁니다!

댓글 쓰기