불변성이란 말 그대로 변하지 않는 것을 의미
불변 데이터는 한 번 생성되고나면 그 뒤에는 변할 수 없다 즉, 프로그래밍에서 Immutability는 데이터의 원본이 훼손되는 것을 막는 것을 의미한다
Primitive Type
- Boolean
- String
- Number
- Null
- Undefined
- Symbol
원시타입은 선언되는 순간 값이 메모리에 저장되고, 변수가 그 값을 가리키게 된다
이 값은 메모리 영역 안에서 변경이 불가능하며 변수에 할당할 때
완전히 새로운 값으로 만들어지므로 원시타입은 불변하다Mutable Type
객체형 타입은 선언되는 순간 값 자체가 아닌
새로운 메모리 주소를 생성 저장하기 때문에 객체 별로 새로운 주소가 생성된다. 따라서 동등 비교를 했을 경우 그 내용이 같더라도 false 값이 반환된다. 객체는 변할 수 있는 값이며 새로운 값이 만들어지지 않고 직접적으로 변경이 가능하다우리는 개발자로서 유지보수가 가능하고 가독성이 좋은 코드를 작성해야한다.
불변성을 지키지 않는다면 사용할 데이터가 어디서 어떻게 바뀌어가는지 흐름을 쫓아가기 어렵고, 이는 곧 예기치 못한 side effects나 버그로 이어지게 만든다.
불변성을 지켜 명시적으로 작성된 코드는 다른 개발자가 코드를 보았을 때도 내가 모르는 어딘가에서 데이터가 변화했을거야! 라는 불필요한 의심없이 코드를 읽는 그대로 흐름을 따라가면서 이해할 수 있도록 돕는다.
따라서 불변성을 지키면서 데이터를 변화시킨다면, 예상가능하고 신뢰할 수 있는 코드가 될 수 있다.
애초에 불변성을 지켜야 한다는 것은 리액트가 만들어낸 새로운 컨셉이 아니라 불변성이라는 개념을 지켜가면서 state와 props를 이용할 수 있도록 하는 아이디어를 리액트에 녹여낸 것이다.
immutable한 값을 state나 props로 사용한다면 어떠한 일련의 이벤트를 통해 새롭게 만들어진 object가 변수에 할당 되는 것을 볼 수 있다. 이러한 새로운 값에 대한 참조는 기존의 값에서 값이 어떻게 변화하는지 추적하기가 쉽게 만들어준다.
단순한 불변성 개념 그 자체보다는 왜 불변성을 지켜가며 코드를 작성해야하는지 대해 좀 더 포커스를 두고 생각한다면 더 좋은 코드를 작성할 수 있을 것이다.
출처 : 아래의 사이트들을 보면서 큰 공부 하였습니다
https://sustainable-dev.tistory.com/156
https://serzhul.io/JavaScript/javascript-불변성(immutability)/
'Front-End > JavaScript' 카테고리의 다른 글
[JavaScript] Hoisting (호이스팅) (0) | 2022.03.05 |
---|---|
[JavaScript] 데이터 타입 (Data Type) (0) | 2022.03.03 |
[JavaScript] 기본 문법 (0) | 2022.03.02 |
[JavaScript] DOM (Document Object Model) (0) | 2022.03.02 |
[JavaScript] 정의 & 특징 (0) | 2022.03.01 |