“ES6 Map”을 React와 Redux와 함께 사용하기

React와/또는 Redux에서 ES6 Map 사용하기 소개 ES6는 JavaScript에 많은 새로운 기능을 가져왔는데, 그 중 하나는 Map 객체입니다. Map은 타입 안전한 키-값 저장소를 제공하여 React와 Redux 애플리케이션에서 데이터 처리에 사용될 수 있습니다. 이 글에서는 React와/또는 Redux와 …

title_thumbnail(

React와/또는 Redux에서 ES6 Map 사용하기

소개

ES6는 JavaScript에 많은 새로운 기능을 가져왔는데, 그 중 하나는 Map 객체입니다. Map은 타입 안전한 키-값 저장소를 제공하여 React와 Redux 애플리케이션에서 데이터 처리에 사용될 수 있습니다. 이 글에서는 React와/또는 Redux와 함께 Map 객체의 사용법, 이점, 제한 사항 및 불변성에 대한 해결책에 대해 알아보겠습니다.

ES6 Map 사용의 이점

Map 객체는 전통적인 JavaScript 객체와 비교했을 때 여러 가지 장점을 제공합니다:

  • 타입 안전성: 일반 객체와 달리 Map은 어떤 데이터 유형의 키도 허용하여 값을 저장하고 검색할 때 타입 안전성을 제공합니다.
  • 순서 보존: Map은 원소의 삽입 순서를 유지하기 때문에 특정 사용 사례에 유용합니다.
  • O(1) 조회: Map을 사용하면 키로 값을 조회할 때 일정한 시간 복잡도를 가지므로 효율적인 데이터 검색이 가능합니다.

불변성에 대한 고민 사항

불변성은 React와 Redux에서 중요한 측면이며, 예측 가능한 상태 관리 및 효율적인 컴포넌트 렌더링을 보장합니다. 그러나 Map은 값을 업데이트하기 위한 편리한 메서드를 제공하지만 불변성에 대한 내장 지원은 제공하지 않습니다.

const newMap = new Map(oldMap.entries())를 사용하면 원본과 동일한 내용을 가진 새로운 Map 인스턴스를 생성할 수 있습니다. 그러나 이 접근 방법은 자주 업데이트해야 한다면 효율적이지 않을 수 있으며, 매번 수정할 때마다 새로운 인스턴스를 만드는 작업이 필요합니다.

불변성에 대한 해결책

1. Map을 객체로 변환하기

불변성이 고려 사항인 경우, 스프레드 연산자를 사용하여 Map을 일반 JavaScript 객체로 변환할 수 있습니다:

const obj = Object.fromEntries(myMap);

Map을 객체로 변환함으로써 Redux 또는 React에서 사용 가능한 일반적인 불변성 업데이트 패턴을 활용할 수 있습니다:

const newObj = { ...obj, newKey: "value" };

다만, 이 접근 방식은 원소의 순서를 포기하게 됩니다.

2. 사용자 정의 불변성 Map 사용하기

불변성 문제를 직접 해결하기 위해 Map 객체를 감싸는 사용자 정의 래퍼를 만들 수 있습니다. 이 래퍼는 setIn, updateIn, 또는 deleteIn과 같은 메서드를 제공하여 Map 인스턴스를 수정하면서도 불변성을 유지할 수 있습니다.

다음은 사용자 정의 불변성 Map을 구현하는 예시입니다:

class ImmutableMap {
  constructor() {
    this.map = new Map();
  }

  setIn(keys, value) {
    const newMap = new ImmutableMap();
    newMap.map = new Map(this.map);
    let currentMap = newMap.map;
    for (let i = 0; i < keys.length - 1; i++) {
      const key = keys[i];
      let nestedMap = currentMap.get(key);
      if (!nestedMap) {
        nestedMap = new Map();
        currentMap.set(key, newMap);
      }
      currentMap = nestedMap;
    }
    currentMap.set(keys[keys.length - 1], value);
    return newMap;
  }
  
  // deleteIn, updateIn 등의 다른 메서드도 포함할 수 있습니다.
}

사용자 정의 불변성 Map 래퍼를 사용하여 변경 사항이 지정된 불변성을 가진 새로운 인스턴스로 결과물을 얻을 수 있습니다.

결론

ES6의 Map 객체는 React와/또는 Redux 애플리케이션에서 키-값 데이터를 관리하기 위한 강력한 도구가 될 수 있습니다. 내장 불변성 지원이 없을 수는 있지만, 객체로 변환하거나 사용자 정의 불변성 래퍼를 구현하는 등의 기술을 활용하여 이 제한을 극복할 수 있습니다.

React 또는 Redux 프로젝트에서 Map 객체를 사용하기 전에 특정 사용 사례와 성능 요구 사항을 신중하게 고려해야 합니다.

참고 자료 : 

reactjs

Leave a Comment