불변성

KHW·2021년 9월 21일
0

Javascript 지식쌓기

목록 보기
81/95

불변성

상태를 변경하지 않는 것

  • 메모리에 저장된 값을 변경하는 모든 행위를 하지 않는 것

메모리에 저장된 값을 변경하는 모든 행위중에는
재할당이 이에 포함된다.

값에 의한 호출 / 참조에 의한 호출

값에 의한 호출 방식

함수의 인자로 어떤 변수를 넘길 때 해당 변수가 가지고 있는 값을 그대로 복사하여 함수에게 넘겨주는 방식

기존에 str 변수가 가리키고 있는 메모리 공간에 있는 값을 함수에 인자로 넘기는 것이 아니라 그 값을 복사하여 새로운 메모리 공간에 저장하고나서 넘겨준다

function foo (s) {
  return s.substring(0, 2);
};

const str = 'Hello, World!';

console.log(foo(str))		//He
console.log(str)		//Hello, World!
  • 원본 str은 바뀌지않는다.
    str을 매개변수로 받을 때 call by value로 복사한 값을 가져온다.

참조에 의한 호출 방식

변수가 가리키고 있는 메모리 공간의 주소를 넘기는 방식

배열을 직접 변경해버리는 것이므로, 상태가 변경되었다고 말할 수 있고, 불변성이 깨져버린 것

function bar (a) {
  a.push('hi');
  return a;
};

const array = [];
bar(array);

console.log(array);		//[ 'hi' ]
  • bar 함수의 인자로 넘겼던 array 변수의 값이 변경

표로 정리

제목Boolean,null,undefined,Number,String,Symbolarray Object
호출 방식값에 의한 호출참조에 의한 호출
원본 변화XO
대상원시타입참조타입

메소드의 차이

  • String

string = string.slice(0,1)
string의 필요한 값을 만든 후 string으로 재할당하여야 string에 변화된 값이 등록된다.
이것 또한 값에 의한 호출이다.

  • Array

Array.push(value)
Array는 변수가 가리키고 있는 메모리 공간의 주소 를 통해 값을 추가한다.
이는 기존의 원본에 영향을 끼치는 것이므로
따로 Array = Array.push(value) 이럴 필요가 없다.

출처

불변성

profile
나의 하루를 가능한 기억하고 즐기고 후회하지말자

0개의 댓글