그알것 — 그럼에도 알아야 할 것들
홈질문커뮤니티
로그인
그알것 — 그럼에도 알아야 할 것들

Service

  • 홈
  • 소개
  • 질문
  • 커뮤니티

My

  • 내 워크스페이스
  • 저장한 질문
  • 작성한 답변

Policy

  • 이용약관
  • 개인정보처리방침
  • 문의

© 2026 그알것 · What Still Matters

질문 목록State
State

불변성(Immutability)이 뭔가요

실무4/5
설계3/5
인간3/5
기초3/5

면접관의 질문 의도

불변성을 'React에서 그렇게 해야 한다더라'로 외운 사람과, 참조 비교·변경 추적·사이드이펙트 격리라는 원리까지 묶어 답하는 사람을 구분하려는 질문이다. 답에 따라 얕은/깊은 복사, Immer, 리렌더 최적화로 깊이를 캐물을 수 있다.

큐레이션 답변

학습 자료

불변성은 한 번 만든 값을 직접 바꾸지 않고, 변경이 필요하면 새 값을 만들어 갈아끼우는 원칙이다. 자바스크립트의 객체·배열은 기본이 가변이므로 불변성을 지키려면 스프레드, Object.assign, 구조 분해 같은 도구로 새 참조를 명시적으로 만들어야 한다. 핵심 동작은 '값을 수정한다'가 아니라 '참조를 교체한다'다. 그래서 React 같은 렌더러는 이전 참조와 새 참조를 얕게 비교해 변경 여부를 판단한다.

좋은 답변 구조

  1. 01불변성을 '값을 직접 바꾸지 않고 새 참조로 교체한다'는 동작 원리로 정의한다
  2. 02가변 업데이트와 불변 업데이트가 변경 감지에 어떻게 다른 신호를 주는지 비교한다
  3. 03React·Redux 같은 도구가 왜 불변성을 전제로 동작하는지 한 줄로 연결한다
  4. 04중첩 객체에서 얕은 복사의 한계와 Immer 같은 도구의 자리를 짚는다

자주 실수하는 포인트

Object.freeze로 막아두면 불변성이 끝났다고 보고 깊은 구조의 가변성을 놓친다
중첩 객체를 스프레드 한 번으로 얕게만 복사해 안쪽 참조가 그대로 남는 걸 모른 채 쓴다
배열에서 push·splice·sort 같은 원본을 바꾸는 메서드와 map·filter 같은 새 배열을 만드는 메서드를 구분하지 못한다
불변성을 '항상 깊은 복사'로 오해하고 매번 JSON.parse(JSON.stringify())로 처리해 성능을 갉아먹는다

실무 맥락

  • useState·Redux처럼 참조 비교로 리렌더를 결정하는 상태 관리가 깔린 React 앱
  • Undo·Redo·시간 여행 디버깅처럼 과거 상태를 그대로 보존해야 하는 기능
  • 여러 컴포넌트가 같은 객체를 참조해 한쪽 수정이 다른 쪽에 새는 버그가 자주 나는 코드베이스

본인 경험에 녹이는 힌트

state를 직접 push했다가 화면이 안 갱신되는 버그를 잡았던 경험이 있다면 참조 비교와 불변성의 연결을 자기 말로 풀 수 있다

중첩 객체 한 군데를 바꾸려고 스프레드를 여러 겹 쌓다가 코드가 너무 무거워져 Immer 같은 도구를 도입한 경험이 있다면 불변성의 비용과 도구의 자리를 설명할 수 있다

Redux 리듀서를 직접 짜면서 매번 새 객체를 반환하도록 신경 썼던 경험이 있다면 변경 감지가 무엇을 보고 일어나는지 근거로 댈 수 있다

커뮤니티 인기 답변

전체 0개

아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.

관련 꼬리 질문

Q1얕은 복사와 깊은 복사는 어떤 상황에서 갈리나요
Q2React가 상태 변경을 감지할 때 정확히 무엇을 비교하나요
Q3Immer는 어떤 문제를 어떻게 풀어주는 도구인가요
Q4불변성을 지키는 코드와 성능 비용 사이의 균형은 어떻게 잡나요
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문