객체의 변경불가성 (immutability)
객체의 변경 불가성에 대해서 정리를 해본다.
Object immutability (객체의 변경불가성)
객체를 더 이상 변경불가능한 상태로 만드는 디자인 패턴을 의미한다.
객체는 참조를 통해 접근이 가능한 특성을 지니기 때문에 언제든 객체에 변경이 일어날 가능성이 있다는 의미도 된다.
위를 위해 ES5에서는 방어적 복사(defencive copy)와 옵저버 패턴으로 위 문제를 해결하곤한다.
불변 객체로 만들게 되면 복제나 비교를 위한 작업이 단순화 되며, 성능 개선에 도움이된다. 하나 기존 객체가 변경이 가능한 데이터가 많을 경우 역효과니 주의한다.
ES6에서는 이를 불변 데이터 패턴(immutable data pattern) 으로 쉽게 해결하도록 제공한다고 한다.
변경이 가능한, 변경이 불가한 것은 무엇인가
원시 타입은 변경이 불가능하다.
Boolean, null, undefined, Number, String, Symbol(ES6)
이전에 학습했기에 원시 타입을 제외하곤 모두 객체로 취급된다는 걸 안다.
자바스크립트에서 변경이 불가능하다는 의미는 메모리에 올라가 있는 데이터는 변경이 불가능하다는 것이고, 재할당은 가능하다.
아래의 경우에 myName 에 user.name 을 참조 시켰고 이후 변경을 가미했다. 한번 해당 객체를 참조하는 것이 아니라, 원시타입 String 'kim' 을 참조하는 사실을 알도록 하자.
아래의 경우에는 별도로 새로운 메모리에 할당 되는 것이 아니라 같은 곳을 바라보기 때문에 동시에 변경되고 의도된 코딩이 아니라면 막아야한다.
불변 데이터 패턴(immutable data pattern)
결론적으로는 ES6 에서 등장하는 freeze(), assign() 과 같은 방법의 불변객체를 만드는 법을 제공한다.
위 방법으로 하는 법도 있으나 시간적인 공수 및 내부 객체 프로퍼티에 할당된 객체들까지 자동으로 불변이 되는 것은 아니기 때문에 의도한게 아니라면 크리티컬한 코딩이 될 수 있다.
Facebook 에서는 이러한 점 때문에 immutable.js 를 제공한다곤 한다. 이건 언제 쓰이는지 알아보아야겠다.
Last updated
Was this helpful?