학습 공간 개념 · 판단 · 실험

Fanta Lab

질문 84 · 실전 면접 답변

state를 직접 변경하지 않고 setter를 사용하는 이유는 무엇인가요?

이렇게 답해 보세요 (핵심 답변)

state 객체를 직접 수정(mutation)하면 메모리의 값은 바뀌더라도 React에 업데이트 요청이 전달되지 않아 화면이 다시 그려지지 않기 때문입니다. setter를 통해 새로운 객체 참조나 값을 넘겨주어야 React가 이전 스냅샷과 비교(Object.is)해 변경을 감지하고 다음 렌더를 예약할 수 있습니다. 또한 기존 상태를 훼손하지 않고 새 복사본을 만드는 불변성을 지켜야 이전 렌더 스냅샷과 메모이제이션 비교, 디버깅 이력이 안전하게 유지됩니다.

함께 설명하면 좋은 이유 (꼬리질문 대비)

  1. 직접 프로퍼티를 덮어쓰고 같은 객체 참조를 setter에 넘기면 React는 값이 변하지 않았다고 판단해 렌더링을 건너뜁니다.
  2. 불변 업데이트를 유지하면 어느 시점에 어떤 요청으로 상태가 바뀌었는지 예측하고 추적하기 쉬워집니다.

면접에서 자주 하는 실수

배열이나 객체 state를 const로 선언했다고 해서 내부 프로퍼티 수정까지 막아 주는 것은 아니므로 push나 직접 대입 대신 새 참조를 만들어야 합니다.

원리와 예제까지 읽기

공식 참고 자료

질문 목록 출처 ↗ · 원본 84번을 바탕으로 질문과 답변을 새로 정리했습니다.

← React