ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ
    ์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ 2023. 2. 10. 02:14

    TLDR;

    ์–•์€ ๋ณต์‚ฌ๋Š” ์ฐธ์กฐ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ๊นŠ์€ ๋ณต์‚ฌ๋Š” ๋‚ด๋ถ€์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์–•์€ ๋ณต์‚ฌ๋Š” ์ฐธ์กฐ๊ฐ’ ๋ณต์‚ฌ์ด๊ธฐ์— ๋ณต์‚ฌ๋ณธ ๋ณ€๊ฒฝ ์‹œ ์›๋ณธ์ด ๋ณ€๊ฒฝ๋˜์ง€๋งŒ, ๊นŠ์€ ๋ณต์‚ฌ๋Š” ์•„์˜ˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์‚ฌ๋ณธ ๋ณ€๊ฒฝ์—๋„ ์›๋ณธ์€ ํ›ผ์†๋˜์ง€ ์•Š๋Š”๋‹ค.

    ๊ฐ์ฒด๋ฅผ ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ๊ฐ–๋Š” ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ ์–•์€ ๋ณต์‚ฌ๋Š” ํ•œ ๋‹จ๊ณ„๊นŒ์ง€๋งŒ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•˜๊ณ  ๊นŠ์€ ๋ณต์‚ฌ๋Š” ๊ฐ์ฒด์— ์ค‘์ฒฉ๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด๊นŒ์ง€ ๋ชจ๋‘ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ์›๋ณธ๊ณผ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋‹ค.

    ์–•์€ ๋ณต์‚ฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” Spread Operator ๋˜๋Š” Object.assign์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•˜๋ ค๋ฉด ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ JSON ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

    ๋ถˆ๋ณ€๊ฐ’์ธ ๊ธฐ๋ณธํ˜• vs ๊ฐ€๋ณ€๊ฐ’์ธ ์ฐธ์กฐํ˜•

    ๊ธฐ๋ณธํ˜•์€ ๋ถˆ๋ณ€๊ฐ’์ด๋‹ค.

    ๊ธฐ๋ณธํ˜• ํƒ€์ž…์˜ ๊ฒฝ์šฐ ๊ธฐ์กด์— ์„ ์–ธํ•ด ๋†“์€ ๋ณ€์ˆ˜์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ํ• ๋‹นํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ์— ์ƒˆ๋กœ์šด ์˜์—ญ์„ ๋งˆ๋ จํ•ด์„œ, ํ•ด๋‹น ๊ณต๊ฐ„์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๊ฐ’์„ ๋‹ค์‹œ ๊ธฐ์กด์˜ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๋ถˆ๋ณ€๊ฐ’์ด๋‹ค.

    ์•„๋ž˜ ์ฝ”๋“œ์—์„œ a๋Š” ์ฒ˜์Œ์—๋Š” 'abc'๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์˜์—ญ์˜ ์ฃผ์†Ÿ๊ฐ’ @2001์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€, 'abcdef'๋ฅผ ๋‹ค์‹œ ํ• ๋‹นํ•˜๋ฉด 'abcdef'๋ฅผ ๋‹ด๊ฒŒ ๋  ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด ํ•ด๋‹น ๊ณต๊ฐ„์˜ ์ฃผ์†Ÿ๊ฐ’์ธ @2002๋ฅผ a์— ์ƒˆ๋กœ ํ• ๋‹นํ•œ๋‹ค.

    // ๊ธฐ๋ณธํ˜• ํƒ€์ž…(primitive type)์˜ ๋ถˆ๋ณ€์„ฑ
    var a = 'abc';
    a = a +'def';    // abc์™€ abcdef๋Š” ์ „ํ˜€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค. (์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„๋‹ค.)
    
    var b = 5; 
    var c = 5;
    b = 7;          // b๋ฅผ 7๋กœ ๋ฐ”๊พธ๋ฉด, ๊ธฐ์กด์— 7์ด ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ์˜์—ญ ์žˆ๋Š”์ง€ ๋จผ์ € ๊ฒ€์‚ฌ, 
                    // ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ b์— ์ €์žฅํ•จ

    [ ์ด๋ฆ„ : a / ๊ฐ’ : @2001('abc') ] => [ ์ด๋ฆ„ : a / ๊ฐ’ : @2002('abcdef') ] // ์ฃผ์†Ÿ๊ฐ’์ด ์•„์˜ˆ ๋‹ฌ๋ผ์ง„๋‹ค.
    [ ์ด๋ฆ„ : b / ๊ฐ’ : @3001(5) ] => [ ์ด๋ฆ„ : b / ๊ฐ’ : @3003(7) ]

    ๋ฐ˜๋ฉด, ์ฐธ์กฐํ˜• ํƒ€์ž…์€ ๊ฐ€๋ณ€๊ฐ’์ด๋‹ค.

    ์–ด๋–ค ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž. ์•„๋ž˜ ์˜ˆ์‹œ ์ฝ”๋“œ์—์„œ obj1์ด๋ผ๋Š” ๊ฐ์ฒด๋Š” a์™€, b๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Ÿ๊ฐ’ ๋ฌถ์Œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, obj1์€ a,b๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๊ฐ’ @7103, @7104๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๊ฐ’ @5001์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค.

    ๋งŒ์•ฝ ํ”„๋กœํผํ‹ฐ a๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ, a๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Ÿ๊ฐ’์ธ @7103์— ์ฐพ์•„๊ฐ€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ด ๋•Œ, obj1์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Ÿ๊ฐ’, ์ฆ‰ @5001์— ๋‹ด๊ฒจ ์žˆ๋Š” ์ฃผ์†Œ๊ฐ’์€ ๊ทธ๋Œ€๋กœ @7103, @7104์ด๋ฉฐ ๋‹จ์ง€ @7103์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝ(@5003 -> @5004)ํ•ด ์ค„ ๋ฟ์ด๋‹ค.

    ์ฃผ๋ชฉํ•  ์ ์€ ํ”„๋กœํผํ‹ฐ ๋ณ€๊ฒฝ ์ „๊ณผ ํ›„์— obj 1์ด ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๊ฐ’ @5001์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. (cf. ๊ธฐ๋ณธํ˜•์˜ ๊ฒฝ์šฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Ÿ๊ฐ’ ์ž์ฒด๊ฐ€ ๋ณ€ํ•œ๋‹ค.)

    // ์ฐธ์กฐํ˜• ํƒ€์ž…(reference type)์˜ ๊ฐ€๋ณ€์„ฑ - ํ”„๋กœํผํ‹ฐ ์žฌํ• ๋‹น
    
    var obj1 = {
        a: 1,
        b: 'bbb'
    };
    
    obj1.a = 2; // obj1์ด ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ์ฃผ์†Œ๊ฐ’์„ ๋‹ด๊ณ  ์žˆ๋Š” @5001(๋ฐ์ดํ„ฐ @7103~@7104)์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.  
                // @7103์•ˆ์— ์žˆ๋Š” ๊ฐ’์ด @5004๋กœ ๋ฐ”๋€” ๋ฟ์ด๋‹ค.

    ๋ณ€๊ฒฝ ์ „
    [ ์ด๋ฆ„ : obj1 / ๊ฐ’ : @5001(@7103(@5003(1)) ~ @7104(@5002(bbb)) ]

    ๋ณ€๊ฒฝ ํ›„
    [ ์ด๋ฆ„ : obj1 / ๊ฐ’ : @5001(@7103(@5004(2)) ~ @7104(@5002(bbb)) ]

    *๋ณ€๊ฒฝ ์ „๊ณผ ํ›„์— obj1์€ ๋™์ผํ•˜๊ฒŒ @5001(@7103~ @7104)์„ ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

    ๊ฐ€๋ณ€์„ฑ์ด ๋ณต์‚ฌ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

    ์•ž์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ, ๋ณต์‚ฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ๊ธฐ๋ณธํ˜• ํƒ€์ž…์€ ๊ฐ’์ด ๋‹ด๊ธด ์ฃผ์†Ÿ๊ฐ’์„ ๋ฐ”๋กœ ๋ณต์ œํ•˜๋Š” ๋ฐ˜๋ฉด, ์ฐธ์กฐํ˜•์€ ๊ฐ’์ด ๋‹ด๊ธด ์ฃผ์†Ÿ๊ฐ’๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌถ์Œ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Ÿ๊ฐ’์„ ๋ณต์ œํ•œ๋‹ค. ๋‹ค์‹œ, ์ฃผ๋ชฉํ•ด์•ผ ํ•  ์ ์€ ์ฐธ์กฐํ˜•์€ ์ฃผ์†Ÿ๊ฐ’์„ ๋ณต์ œํ•œ๋‹ค๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

    ์ฐธ์กฐํ˜•์€ ์ฃผ์†Œ๊ฐ’์„ ๋ณต์ œํ•œ๋‹ค๋Š” ํŠน์„ฑ ๋•Œ๋ฌธ์— ์ฐธ์กฐํ˜•์—์„œ ๋ณต์‚ฌ๋Š” ๋‹ค์Œ์™€ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค.

         
    ๋ถ„๋ฅ˜ ์ •์˜ ์„ค๋ช…
    ์–•์€ ๋ณต์‚ฌ(shallow copy) ๋ฐ”๋กœ ์•„๋ž˜ ๋‹จ๊ณ„์˜ ๊ฐ’๋งŒ ๋ณต์‚ฌ ์ค‘์ฒฉ๊ฐ์ฒด์—์„œ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ ๊ทธ ์ฃผ์†Ÿ๊ฐ’๋งŒ ๋ณต์‚ฌ. ์ฆ‰, ์‚ฌ๋ณธ ๋ฐ”๊พธ๋ฉด ์›๋ณธ์˜ ๋ฐ์ดํ„ฐ๋„ ๋ฐ”๋€œ
    ๊นŠ์€ ๋ณต์‚ฌ(deep copy) ๋‚ด๋ถ€์˜ ๋ชจ๋“  ๊ฐ’๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ „๋ถ€ ์ฐพ์•„์„œ ๋ณต์‚ฌ ๋ชจ๋‘ ๋ณต์‚ฌํ•˜๋ฏ€๋กœ ์›๋ณธ์˜ ๋ถˆ๋ณ€์„ฑ ์œ ์ง€๊ฐ€๋Šฅ

    ์–•์€ ๋ณต์‚ฌ๋ž€?

    ์ฐธ์กฐ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ณต์‚ฌ๋ณธ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์›๋ณธ์ด ๋ณ€๊ฒฝ๋œ๋‹ค.

    var obj1 = { c: 10, d: 'ddd'};
    var obj2 = obj1;                   // obj2์— obj1์˜ ์ฃผ์†Ÿ๊ฐ’์„ ๋ณต์‚ฌ
    
    obj2 = { c: 20, d: 'ddd'};         // ์ฃผ์†Ÿ๊ฐ’์„ ๋ณต์‚ฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์‚ฌํ•œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์›๋ณธ๋„ ๋ณ€๊ฒฝ๋œ๋‹ค.

    ์–•์€ ๋ณต์‚ฌ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ Spread Operator ํ˜น์€ Object.assign์„ ์ด์šฉํ•œ๋‹ค. 

    ๊ทธ๋Ÿฐ๋ฐ ์ธํ„ฐ๋„ท์— ์ฐพ๋‹ค๋ณด๋ฉด Spread Operator๋Š” 1depth๊นŒ์ง€ ๊นŠ์€ ๋ณต์‚ฌ๋‹ค ๋ผ๋Š” ๊ธ€์„ ๋งŽ์ด ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์„œ ์ฒ˜์Œ์—๋Š” ํ—ท๊ฐˆ๋ ธ๋‹ค. ๋‚˜์˜ ๊ฒฝ์šฐ [ ], { } ๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด, ๊ฐ์ฒด๋ฆฌํ„ฐ๋Ÿด์ด ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž์˜ ํ•œ ๋ถ€๋ถ„์ด๋ผ๊ณ  ์—ฎ์–ด์„œ ์ƒ๊ฐํ•˜์—ฌ ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด ์–•์€ ๋ณต์‚ฌ๋ฅผ ํ•œ๋‹ค๋Š” ๋ง์ด ์ž˜ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์•˜๋‹ค. 

    ์ •๋ฆฌํ•ด ๋ณด์ž๋ฉด, { ...obj }์™€ ๊ฐ™์ด ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž๋กœ ๋ณต์‚ฌํ•  ๋•Œ,  { } ์ค‘๊ด„ํ˜ธ ๋ถ€๋ถ„์€ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒˆ๋กœ์šด ์ฃผ์†Œ๊ฐ’์„ ๋งŒ๋“ค์–ด ๋‚ด๋ฉฐ, ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž๋กœ ๊ฐ’์„ ๋ณต์‚ฌํ•ด ์˜จ๋‹ค. ์ด ๋•Œ, ์›๋ณธ์˜ ๊ฐ’์ด ์›์‹œํ˜•(primitive type)์ธ์ง€, ์ฐธ์กฐํ˜•(reference type)์ธ์ง€์— ๋”ฐ๋ผ ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š๋ƒ, ์ฃผ์†Œ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š๋ƒ๊ฐ€ ๋‚˜๋‰œ๋‹ค. ์ฐธ์กฐํ˜•์˜ ๊ฒฝ์šฐ ์ฐธ์กฐํ˜• ์•ˆ์˜ ํ”„๋กœํผํ‹ฐ๊นŒ์ง€ ์ „๋ถ€ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ์ฃผ์†Œ๊ฐ’๋งŒ ๋ณต์‚ฌ๊ฐ€ ๋˜์—ˆ์œผ๋ฏ€๋กœ, ๋ณต์‚ฌํ•œ ๊ฐ์ฒด์˜ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์›๋ณธ๋„ ๋ณ€๊ฒฝ์ด ๋œ๋‹ค. 

    ๋”ฐ๋ผ์„œ ์–•์€ ๋ณต์‚ฌ์ด๋ฉฐ, ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ฐธ์กฐ๋ฅผ ๋Š์–ด์ฃผ๋„๋ก ์™„์ „ํžˆ ๋ณต์‚ฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์„ ๊นŠ์€ ๋ณต์‚ฌ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    ์–•์€ ๋ณต์‚ฌ 1. Spread Operator

    const obj = {name: 'Minju', favorites:{food:'cake', music: 'acoustic'}};
    const copyObj = {...obj}  // { }๊ฐ์ฒด๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒˆ๋กœ์šด ๊ฐ์ฒด ๋งŒ๋“  ํ›„, name์€ ๊ฐ’ ๋ณต์‚ฌ, favorites๋Š” ์ฃผ์†Œ๊ฐ’ ๋ณต์‚ฌ
    
    copyObj.name = 'Ariel';   // primitive type์ด๊ธฐ ๋•Œ๋ฌธ์— ์›๋ณธ ๋ฐ”๋€Œ์ง€ ์•Š์Œ.
    copyObj.favorites.food = 'bread'   // obj.favorites์™€ copyObj.favorites๋Š” ๊ฐ™์€ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ ์ค‘ copyObj์˜ food์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ–ˆ์œผ๋‹ˆ, obj๋„ ๋ฉ๋‹ฌ์•„ ๋ณ€๊ฒฝ๋จ

    ์–•์€ ๋ณต์‚ฌ 2. Object.assign()

    Spread Operator ๋Œ€์‹ ์— Object.assign()์„ ์ด์šฉํ•ด๋„ ๋œ๋‹ค.

    const obj = {a : 1, b: 2}
    
    const copyObj = Object.assign({}, obj) // ์ตœ์ƒ๋‹จ์€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์†Œ๊ฐ’์ด ์™„์ „ ๋‹ฌ๋ผ์กŒ์ง€๋งŒ, ๋‚ด๋ถ€์˜ ๊ฐ’์€ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด ์˜ด

     

    ๊นŠ์€ ๋ณต์‚ฌ๋ž€?

    ๋‚ด๋ถ€์˜ ๋ชจ๋“  ๊ฐ’๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ „๋ถ€ ์ฐพ์•„์„œ ๋ณต์‚ฌํ•˜์—ฌ ์•„์˜ˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

    ๊ฐ’์€ ๊ฐ™์ง€๋งŒ ์›์‹œํ˜•, ์ฐธ์กฐํ˜•์— ์ƒ๊ด€์—†์ด ์ฃผ์†Ÿ๊ฐ’์ด ์™„์ „ํžˆ ๋‹ค๋ฅธ, ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์–•์€ ๋ณต์‚ฌ์™€ ๋‹ค๋ฅด๊ฒŒ ๋ณต์‚ฌ๋ณธ ๋ณ€๊ฒฝ์‹œ ์›๋ณธ์€ ์œ ์ง€๋œ๋‹ค.

     

    ๊ฐ’์œผ๋กœ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ์ฒด์— ๋ณ€๊ฒฝ์„ ๊ฐ€ํ•˜๋”๋ผ๋„ ์›๋ณธ ๊ฐ์ฒด๋Š” ๋ณ€ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•˜๋ ค๋ฉด ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, JSON ๋ณ€ํ™˜์„ ํ•˜๋ฉด ๋œ๋‹ค.

    ๊นŠ์€ ๋ณต์‚ฌ ๋ฐฉ๋ฒ• 1. ์žฌ๊ท€ํ•จ์ˆ˜ ์‚ฌ์šฉ

    var copyObjectDeep = function(target){
        var result = {};
        if(typeof target === 'object' && target !== null){    // typeof ๋ช…๋ น์–ด๊ฐ€ null์— ๋Œ€ํ•ด์„œ๋„ 'object'๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด์— ์ถ”๊ฐ€ํ•จ
            for (var prop in target){
                result[prop] = copyObjectDeep(target[prop]); // ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ
            }
        }else{
            result = target;
        }
        return result;
    }

     

    ๊นŠ์€ ๋ณต์‚ฌ ๋ฐฉ๋ฒ• 2. JSON ๋ณ€ํ™˜ ์‚ฌ์šฉ

    ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ๋ฒ•์œผ๋กœ ํ‘œํ˜„๋œ ๋ฌธ์ž์—ด๋กœ ์ „ํ™˜ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ JSON ๊ฐ์ฒด๋กœ ๋ฐ”๊พธ๋ฉด ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    httpRequest๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ ๋“ฑ ์ˆœ์ˆ˜ํ•œ ์ •๋ณด๋งŒ ๋‹ค๋ฃฐ ๋•Œ ํ™œ์šฉํ•˜๊ธฐ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค!

    var copyObjectViaJSON = function(target) {
        return JSON.parse(JSON.stringify(target));
    };

    ๋Œ“๊ธ€

Designed by Tistory.