더북(TheBook)

리액트에서 객체와 배열 타입의 상태를 다룰 때는 불변성(immutability)을 지켜야 합니다. 불변성을 지킨다는 것은 객체 또는 배열을 직접 수정하지 않는다는 것을 의미합니다.

예를 들어, 다음과 같은 객체가 있다고 가정해봅시다.

const info = {
    id: 1,
    name: 'John Doe'
};

만약 infoname 값을 'Jane Doe'로 바꾼다면 보통 다음과 같은 코드를 작성할 것입니다.

info.name = 'Jane Doe';

리액트에서 상태를 다룰 때는 객체가 지닌 값을 바꾸고 싶다고 해서 앞에서와 같이 값을 직접 수정하면 안 됩니다. 그 대신 기존 객체는 그대로 두고, 새로운 객체를 만들어 원하는 값을 덮어씌워야 합니다.

const nextInfo = {
    ...info,
    name: 'Jane Doe'
};

Note ≡


여기서 ...infospread 연산자 문법입니다. info 객체가 지닌 값들을 새로 만드는 객체에 펼친다고 이해하면 됩니다.

const object = { a: 1, b: 2, c: 3 };
const anotherObject = { ...object, d: 4 };
console.log(anotherObject); // { a: 1, b: 2, c: 3, d: 4 }
const updatedObject = { ...object, c: 10 };
console.log(updatedObject); // { a: 1, b: 2, c: 10 }

spread 연산자를 사용해 특정 객체를 다른 객체 내부에 펼친 다음, 이미 존재하는 키 값에 대한 값을 지정하면 해당 값이 덮어씌워집니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.