[고급 자바스크립트] 객체 확장과 객체 동결

자바스크립트의 객체 지향 프로그래밍에서 자주 사용되는 패턴을 소개하고자 합니다. 먼저 객체 확장을 관리해봅시다.

Object.defineProperty()

Object의 프로토타입 메서드인 defineProperty를 사용하면 프로퍼티의 초기값, 열거, 할당, 서술자 변경을 관리할 수 있습니다. 해당 패턴을 활용하면 객체 참조 과정에서 예상치 못한 데이터 변화를 제어하거나 초기값을 설정해 코드 관리에 안정성과 성능을 동시에 높여줄 수 있습니다.


Object.preventExtensions()

이번엔 객체의 확장을 막는 쉬운 방법을 알아봅시다. Object의 프로토타입 메서드인 preventExtensions를 사용하면 객체의 확장을 제어해 I/O 과정에서 객체의 형태가 달라지는 것을 관리할 수 있습니다.

preventExtensions은 확장을 제어하는 것입니다. 그렇기 때문에 이미 선언된 프로퍼티에 대한 재할당은 정상적으로 이뤄집니다.


Object.freeze()

현대 자바스크립트 문법에서는 const 문법을 사용해 상수를 관리하긴 하지만 객체 형태로 된 값은 재할당이 가능합니다. 그럼 이번엔 정의한 객체를 절대 변화되지 않도록 동결해봅시다.

사용방법은 매우 간단합니다. Object.freeze()의 파라미터로 객체를 전달하면 동결되어 그 어떤 할당, 확장, 서술자 변경 모두 불가능하게 됩니다. 하지만 Object.freeze()로도 동결하지 못하는 경우가 있는데 어떤 경우일까요? 바로 객체 안에 객체가 있는 경우입니다.

const 문법과 유사하게 객체 안에 객체를 담은 프로퍼티가 있는 경우, 해당 프로퍼티 값의 동결은 이뤄지지 않습니다. 이러한 동결을 우리는 얕은 동결이라고 부릅니다. 만약 객체 안의 모든 객체 값을 동결해 값의 변화를 막고자 한다면 객체를 순회하며 동결하는 재귀 동결 함수를 만들어 사용해야 합니다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global\_Objects/Object/freeze

이제 동결 및 얕고 깊은 동결까지 알아봤습니다. 그런데 객체가 동결되어있는지 여부는 어떻게 확인할 수 있을까요? 그리고 어떻게 해동시켜줄 수 있을까요?

동결 여부를 확인하는 것은 **Object.isFrozen()**을 사용하면 Boolean을 리턴해 확인할 수 있습니다. 그럼 해동은 가능할까요? 자바스크립트 문법을 통한 해동은 불가능합니다. 즉 단방향으로만 작동되는 명령입니다. 그러므로 동결된 데이터를 해결하기 위해서는 객체 자체를 순회하며 복사한 후에 동결이 적용되지 않은 새로운 객체를 사용해 데이터를 관리하는 방식이 사용됩니다.


글에서는 표현하지 않았지만 객체의 제약을 거는 데에는 preventExtensions, freeze 이외에 seal도 함께 사용됩니다. Object.seal()은 preventExtensions와 freeze의 중간 수준의 잠금이라고 생각하시면 됩니다.

[Object.seal() - JavaScript | MDN

Object.seal() 메서드는 객체를 밀봉합니다. 객체를 밀봉하면 그 객체에는 새로운 속성을 추가할 수 없고, 현재 존재하는 모든 속성을 설정 불가능 상태로 만들어줍니다. 하지만 쓰기 가능한 속성의

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global\_Objects/Object/seal](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/seal) 

이번엔 객체에 제약을 걸어 데이터를 보호하거나 재할당을 방지하는 방법을 알아봤습니다. 동결된 데이터나 단방향으로만 흐를 수 있는 데이터는 FLUX 패턴에서도 사용되고, 많은 모듈과 라이브러리에서 사용됩니다. 상태 관리에 관심이 많거나 입출력 과정에서 데이터 훼손을 방어, 또는 모듈 제작에 사용하시면 큰 도움이 되시리라 생각합니다.

웹 개발, 블록체인 컨트렉트 개발 문의:

[플렉스웹(FLEXWEB) - 반응형 웹사이트 전문 개발사

브랜딩 웹사이트, 기업용 웹사이트, 스타트업 프로토타이핑 웹서비스 제작 전문 개발사 플렉스웹입니다.

https://flexweb.io](https://flexweb.io)

Comments

    More from Howdy의 블로그

    See all posts

    특별한 법칙은 아니지만 자주 생각하려는 법칙이 있다. 향기의 법칙이라고 명명한 이 법칙은 무척이나 간단하다. 어떠한 상황에서든 상대를 유혹하라는 것이다. 원하는 것이 있다면 상대방이 원하도록 유혹하는 것이다. 이는 아주 간단한 원칙인데 동시에 매우 달성하기 어려운 법칙이기도 하다. 향…

    Sanghoon Han

    향기의 법칙

    Hearts 1Comments 110/07/2026

    하루가 멀다하고 사고가 터지는 것이 인간사. 인간이 만든 것 중 무엇이 대단하다 말할 수 있을까. 무엇이 완전하다 말할 수 있을까. 무엇이 영원하다 말할 수 있을까. 영원한 것은 단 하나도 없고 먼지가 쌓이지 않는 것도 단 하나도 없다. 기회 역시 영원하지 않아서 영원할 것 같은 젊음…

    Sanghoon Han

    영원하지 않다

    Hearts 0Comments 010/07/2026

    이카루스는 태양에 가까이 가면 안된다는 것을 알았으나 높게 날았다. 깃을 붙인 밀납이 녹아 깃이 떨어져 나가고 나서야 그는 자신의 미래를 보았다. 자유로 향하는 날개를 얻었을 때 태양을 향해서도 바다를 향해서도 안됐다. 고도를 유지하며, 섬세하게 바람을 타지 않는다면 어디로든 날아갈…

    Sanghoon Han

    자유의 날개

    Hearts 0Comments 010/07/2026

    인간이 보편적으로 누리는 권리는 대부분 거래를 통해 획득했다. 참정권은 군복무, 참전으로 얻었고, 링컨의 노예제 해방을 위해선 산업화된 사회에서의 흑인 인권이 필요했다. 반면 노예를 사용하는 것이 경제적 이득이 되는 남부군의 입장에서는 당시 기준으로 재산권 침해에 해당한다고 보았기에…

    Sanghoon Han

    민주주의 붕괴

    Hearts 0Comments 010/07/2026