조아마시

쓸모 있는 상세페이지 만들기

웹개발/javascript

[자바스크립트] 불변 데이터 패턴

joamashi 2024. 8. 1. 22:12

불변 데이터 패턴이란, 한번 생성된 데이터는 절대 변경되지 않도록 하는 프로그래밍 패턴입니다. 즉, 데이터를 수정하고 싶을 때는 기존 데이터를 복사한 후 새로운 데이터를 생성하는 방식을 사용합니다.

왜 불변 데이터 패턴을 사용해야 할까요?

  • 예측 가능성 향상: 데이터가 언제 어떻게 변경될지 예측하기 쉬워져 코드를 더 쉽게 이해하고 디버깅할 수 있습니다.
  • 오류 감소: 의도하지 않은 데이터 변경으로 인한 버그 발생 가능성을 줄여줍니다.
  • 함수형 프로그래밍과의 친화성: 함수형 프로그래밍에서는 불변 데이터가 필수적입니다.
  • React 등의 프레임워크에서 효율적인 상태 관리: 불변 데이터를 사용하면 React에서 가상 DOM을 효율적으로 업데이트할 수 있습니다.

불변 데이터 패턴을 구현하는 방법

1. Object.freeze() 메서드 사용

const person = { name: '홍길동', age: 30 };
Object.freeze(person);

// person.name = '김철수'; // 오류 발생

Object.freeze()는 객체를 깊이 동결하여 객체 자체와 그 안의 모든 프로퍼티를 변경할 수 없도록 만듭니다. 하지만 중첩된 객체는 여전히 변경될 수 있다는 단점이 있습니다.

2. 새로운 객체를 생성하여 값 복사

const person = { name: '홍길동', age: 30 };
const newPerson = { ...person, age: 31 };

// person은 변경되지 않고, newPerson만 age 값이 변경된 새로운 객체가 됩니다.

스프레드 연산자(...)를 사용하여 기존 객체를 복사하고, 변경하고 싶은 부분만 수정하여 새로운 객체를 생성합니다.

3. Object.assign() 메서드 사용

const person = { name: '홍길동', age: 30 };
const newPerson = Object.assign({}, person, { age: 31 });

Object.assign() 메서드는 첫 번째 인자로 전달된 객체에 나머지 객체의 프로퍼티를 복사합니다.

4. Immutable.js 라이브러리 사용

Immutable.js는 불변 데이터를 위한 강력한 라이브러리입니다. 다양한 불변 데이터 구조를 제공하며, 효율적인 업데이트 연산을 지원합니다.

import { Map } from 'immutable';

const map1 = Map({ a: 1, b: 2 });
const map2 = map1.set('c', 3); // 새로운 Map 객체를 반환

// map1은 변경되지 않고, map2에만 'c' 프로퍼티가 추가된 새로운 Map 객체가 생성됩니다.

실제 예시

// 배열 요소 추가하기
const numbers = [1, 2, 3];
const newNumbers = [...numbers, 4];

// 객체의 특정 프로퍼티 값 변경하기
const person = { name: '홍길동', age: 30 };
const newPerson = { ...person, age: 31 };

// 함수에서 불변 데이터 유지하기
function updateState(state, action) {
  switch (action.type) {
    case 'INCREMENT':
      return { ...state, count: state.count + 1 };
    default:
      return state;
  }
}

결론

불변 데이터 패턴은 코드의 예측 가능성을 높이고, 오류를 줄이며, 함수형 프로그래밍과의 친화성을 높이는 데 도움이 됩니다. 특히 React와 같은 프레임워크에서 상태 관리에 효과적입니다. 다양한 방법으로 불변 데이터를 구현할 수 있으므로, 프로젝트의 특성에 맞는 방법을 선택하여 사용하면 좋습니다.

더 궁금한 점이 있으시면 언제든지 질문해주세요.

  • 심화 내용: 불변 데이터 패턴의 장단점, 깊은 복사와 얕은 복사, 불변 데이터 패턴과 관련된 디자인 패턴 등
  • 실제 프로젝트 적용: React, Redux 등에서 불변 데이터 패턴을 활용하는 예시

키워드: 자바스크립트, 불변 데이터, 불변성, immutability, Object.freeze, 스프레드 연산자, Object.assign, Immutable.js, 함수형 프로그래밍, React

728x90