데이터 불변성(Immutability)

he0o0nje·2024년 1월 17일
0

Javascript

목록 보기
9/15

데이터 불변성은 함수형 프로그래밍이나 리액트와 같은 라이브러리에서 주로 강조되며, 코드의 예측 가능성과 디버깅 용이성을 향상시켜 신뢰할 수 있는 코드가 될 수 있다.

변수에 값 할당하기

let greet = 'hello world!';

위의 구문은 'hello world!'라는 값이 메모리에 저장되고, greet 이라는 변수가 이 메모리의 주소를 가리키도록(참조하도록) 하는 것이다.

✨Immutable Type

자바스크립트에서 원시 타입(primitive type)은 변하지 않는 타입이다. 불변 데이터는 한번 생성되고나면 그 뒤에는 변할 수 없다.

  • String, Number, Boolean, Null, undefined, Symbol
    이 값은 메모리영역 안에서 변경이 불가능하며, 변수에 할당할 때 완전히 새로운 값이 만들어져 재할당된다.
let name = 'shj';
// 'shj'라는 string 타입의 값이 메모리에 생성되고, name은 메모리에 생성된 'shj'를 가리킨다.
name = 'haj';
// 'haj'라는 새로운 string 타입의 값이 새로 생성되고, name은 다시 'haj'를 가리킨다.
// 이 때 'shj'는 가비지 컬렉션의 대상이 된다.
let name = 'shj';
let newName = name; // newName은 name이 가리키고 있는 주소('shj' string 값)를 가리킨다.
name = 'haj';

console.log(newName); // shj
console.log(name); // haj
// 세번째 구문까지 실행되었을 때 newName은 여전히 'shj'를 가리키고 있으며 name은 'haj'를 가리킨다.

✨Mutable Type

위의 immutable type을 제외하고 모든 값은 객체(Object)타입이며 변할 수 있는 값이다.

  • Object, Array, Function
    이 값은 새로 만들어지지 않고 직접적으로 변경이 가능하다.
  • const로 선언한 변수는 값이 불변한다고 생각할 수 있지만, const는 값에 대한 참조(가리키는 것)가 변할 수 없다는 것이지 변수가 참조하고 있는 값이 불변한다는 것은 아니다.
const a = {
  name: 'shj'
};
const b = a;
a.name = 'haj';

console.log(b.name); // haj
// b는 a가 가리키고 있는 값, {name: 'haj'}로 변화한 데이터의 주소를 똑같이 참조하고 있기 때문이다.
console.log(a === b) // true

0개의 댓글