Javascript의 불변성

송민지·2022년 5월 16일
0

Javascript

목록 보기
4/17

불변성(Immutability)

말 그대로 변하지 않는 것을 의미한다.
프로그래밍에서 immutability는 데이터의 원본이 훼손되는 것을 막는 것을 의미한다.

자바스크립트는 원시타입과 객체타입이 있는데, 원시타입은 불변성을 띄고 있다.

  • Boolean,
  • String
  • Number
  • Null
  • undefined
  • Symbol

이 원시타입에 변수를 할당하면 새로운 값이 만들어저 재 할당 된다.

let name = 'lee'
name = 'youn'

console.log(name)// youn

첫 줄은 'lee'라는 string을 name에 할당했고,
두번째 줄은 'youn'이라는 string 타입의 메모리에 생성되고 name 은 youn의 메모리값을 갖는다.

즉 원시형 타입은 선언되는 순간 메모리에 저장되고, 변수가 그 값을 가리키게 된다.

같은 값을 가리킨다는 것을 의미한다.

Mutable type

원시형타입을 제외한 모든 값은 객체(Object)타입 이며 변할 수 있는 값이다.

새로운 값이 만들어지지 않고 직접적으로 변경이 가능하다.

let a = {
    name : 'bob'
}

let b = a

b.name = 'jone'

console.log(b.name) //jone
console.log( a === b) //true

첫 줄은 a에 새로운 객체를 할당한다.
두번째 줄은 b가 a가 가리키고 있는 주소를 가리킨다.
세번째 줄은 b가 가리키는 객체의 name에 'jone'이라는 string 데이터를 할당한다.

console.log를 찍어보면 jone이 출력되고 a와 b가 같다는 값이 출력된다.

왜 불변성이 중요한가?

  1. 예측가능성
    불변성을 적용하면 응용 프로그램 아키텍처와 정신 모델을 단순하게 유지할 수 있으므로 응용 프로그램에 대한 추론이 쉬워진다.

  2. 퍼포먼스
    불변 객체에 값을 추가한다는 것은 기존 값을 복사해야하는 곳에 새로운 인스턴스를 생성해야하고 메모리를 소모하는 새로운 객체에 새로운 값을 추가해야한다는 것을 의미하지만 불변 객체는 메모리를 줄이기 위해 구조적 공유를 사용할 수 있다.

개발자는 유지보수가 용이하고 가독성이 좋은 코드를 작성해야 한다.

불변성을 지켜 명시적으로 작성된 코드는 다른 개발자가 코드를 보았을 때도 '내가 모르는 어딘가에서 데이터가 변화했을거야!' 라는 불필요한 의심없이 코드를 읽는 그대로 흐름을 따라가면서 이해할 수 있도록 돕는다.

따라서 불변성을 지키면서 데이터를 변화시킨다면, 예상가능하고 신뢰할 수 있는 코드가 될 수 있다.

결론

  • 원시형 타입은 값이 그 값 자체이므로, 값을 바꿀 수 없다.
  • 객체는 같은 객체라도 속성 값을 바꿀 수 있기 때문에 불변하지 않다.

profile
기록하는 일상

0개의 댓글