{
    "componentChunkName": "component---src-templates-blog-post-js",
    "path": "/20-10-06-destructuring-assignment/",
    "result": {"data":{"site":{"siteMetadata":{"title":"irrationnelle","author":"irrationnelle","siteUrl":"https://dev.rase.blog","comment":{"disqusShortName":"","utterances":"irrationnelle/devlog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"1ec87807-6c3f-52a1-9729-ba1852637791","excerpt":"간단한 의문이지만 코드 리뷰 중 비구조화 할당을 사용해서 프로퍼티 변경하는 것을 보았다. 공간 복잡도 측면에서 상대적으로 메모리 사용이 널널해진 요즘은 immutable…","html":"<p>간단한 의문이지만 코드 리뷰 중 비구조화 할당을 사용해서 프로퍼티 변경하는 것을 보았다.</p>\n<p>공간 복잡도 측면에서 상대적으로 메모리 사용이 널널해진 요즘은 immutable 한 변경, 아니 재할당을 곧잘 보는데 이런 식으로 오브젝트의 프로퍼티를 변경하는 것을 보니 원하는 것처럼 참조 변경이 이루어지는지 궁금해서 찾아보았다.</p>\n<p>결론적으로 비구조화 할당을 이용하여 선언한 변수가 원시 타입이 아니면 얕은 복사가 이루어져서 메모리 참조를 공유한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> expect <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'chai'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">describe</span><span class=\"token punctuation\">(</span><span class=\"token string\">'비구조화 할당을 사용해서'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'복사한 오브젝트의 오브젝트 타입 프로퍼티를 변경하면 원본의 프로퍼티도 변한다.'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> originalObj <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token literal-property property\">subObj</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token literal-property property\">value</span><span class=\"token operator\">:</span> <span class=\"token number\">10</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span>subObj<span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> originalObj<span class=\"token punctuation\">;</span>\n        subObj<span class=\"token punctuation\">.</span>value <span class=\"token operator\">=</span> <span class=\"token number\">20</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>originalObj<span class=\"token punctuation\">.</span>subObj<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>to<span class=\"token punctuation\">.</span><span class=\"token function\">equal</span><span class=\"token punctuation\">(</span><span class=\"token number\">20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>originalObj<span class=\"token punctuation\">.</span>subObj<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>not<span class=\"token punctuation\">.</span>to<span class=\"token punctuation\">.</span><span class=\"token function\">equal</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'복사한 오브젝트의 원시 타입 프로퍼티를 변경하면 원본의 프로퍼티는 변하지 않는다.'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> originalObj <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token literal-property property\">value</span><span class=\"token operator\">:</span> <span class=\"token number\">10</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">let</span> <span class=\"token punctuation\">{</span>value<span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> originalObj<span class=\"token punctuation\">;</span>\n        value <span class=\"token operator\">=</span> <span class=\"token number\">20</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>originalObj<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>not<span class=\"token punctuation\">.</span>to<span class=\"token punctuation\">.</span><span class=\"token function\">equal</span><span class=\"token punctuation\">(</span><span class=\"token number\">20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>to<span class=\"token punctuation\">.</span><span class=\"token function\">equal</span><span class=\"token punctuation\">(</span><span class=\"token number\">20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>originalObj<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>to<span class=\"token punctuation\">.</span><span class=\"token function\">equal</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>위 테스트를 수행하면 오브젝트 타입인 경우 얕은 복사가 이루어지는 것을 알 수 있다.</p>","frontmatter":{"title":"비구조화 할당은 얕은 복사","date":"October 06, 2020"}}},"pageContext":{"slug":"/20-10-06-destructuring-assignment/","previous":{"fields":{"slug":"/20-09-19-contributon-epilogue/"},"frontmatter":{"title":"2020 오픈소스 컨트리뷰톤 Mocha 후기","category":"Dev","draft":false}},"next":{"fields":{"slug":"/20-10-17-cypress-helper/"},"frontmatter":{"title":"Typescript 환경에서 Cypress helper 함수 만들기","category":"e2e","draft":false}}}},
    "staticQueryHashes": ["3128451518","3474900066"]}