Jane K 2022. 7. 5. 01:02

1. copy

1) deep copy

- ์‹ค์ œ ๊ฐ’์„ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ

- ์›์‹œํƒ€์ž… :

let a = 10;

let b = a;

a = 30;

console.log(a) // 30

console.log(b) // 10

 

2) shadow copy

- ์ฃผ์†Œ ๊ฐ’์„ ๋ณต์‚ฌํ•œ๋‹ค๋Š” ์˜๋ฏธ

- ๊ฐ์ฒด object :

let a = { value: 1 }

let newA = a;

newA.value = 2;

console.log(a === newA) // true

a ์™€ newA ๋Š” ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ์นดํ”ผํ•จ ๊ทธ๋ž˜์„œ value: 2 ๋ผ๊ณ  ์ฃผ์†Œ ์•ˆ์˜ ๊ฐ’์ด ๋ฐ”๋€ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์›์‹œํƒ€์ž…์ฒ˜๋Ÿผ ๊ฐ๊ฐ a = value: 1 ์ด๊ณ  newA = value: 2 ๋กœ ๋ณต์‚ฌ๋˜์–ด ๋‹ค๋ฅด๊ฒŒ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ™์€ ์ฃผ์†Œ ์•ˆ์˜ ๊ฐ’์„ ๋ฐ”๊ฟ”์ค€ ๊ฒƒ์ด๋ผ a, newA ๊ฐ’์€ ๊ฐ™์Œ

 

3) ๊ฐ์ฒด๋ฅผ deep copy ํ•˜๋Š” ๋ฐฉ๋ฒ•

- Object.assign() : ์ถœ์ฒ˜ ๊ฐ์ฒด๋“ค์˜ ๋ชจ๋“  ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•œ ์ž์ฒด ์†์„ฑ์„ ๋ณต์‚ฌํ•ด ๋Œ€์ƒ ๊ฐ์ฒด์— ๋ถ™์—ฌ๋„ฃ๊ณ  ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜, 1๋‹จ๊ณ„๊นŒ์ง€๋งŒ ์นดํ”ผ๋จ / ๊ฐ์ฒด๋ฅผ ํ•ฉ์น˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ, ํ•ฉ์น  ๋•Œ๋Š” 2๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ ๊ฐ’์„ ๋ฎ์–ด์“ฐ๊ธฐ ํ•ด์ฃผ๋ฉฐ, ๊ฐ์ฒด์˜ ๋ณต์ œ์—์„œ๋„ ์‚ฌ์šฉ

 

const obj = { num: 1 }

const newObj = Object.assign({}, obj) // ๋ฐ˜์ชฝ์งœ๋ฆฌ ๋””์นดํ”ผ ์™„๋ฒฝํ•œ ๋””์นดํ”ผ๋Š” ์•„๋‹˜

 

console.log(obj) // 1

console.log(newObj) // 1 ์นดํ”ผ

 

newObj.num = 10;

console.log(newObj) // 10 ์œผ๋กœ ๋ณ€๊ฒฝ

console.log(obj === newObj) // false -> obj=1 newObj=10 ๋…ผ์นดํ”ผ

→ ๋ณต์‚ฌ๋Š” ๋์ง€๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฐ˜์˜ ์•ˆ๋จ, newObj ์€ obj ๊ณผ ํ•ฉ์นœ ์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜๊ฐ’์„ ๋ฐ˜ํ™˜, ๋”ฐ๋ผ์„œ obj ์€ ๋ณ€ํ™” ์—†์Œ, ๊ทธ๋ฆฌ๊ณ  deep copy ๋Š” ์ƒˆ๋กญ๊ฒŒ ํ•˜๋‚˜ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋กœ ์ƒ๊ธฐ๋Š” ๊ฑฐ๋ผ ์ฃผ์†Œ๊ฐ€ ๋‹ฌ๋ผ์ ธ์„œ ์–ด๋–ป๊ฒŒ๋“  false ๊ฐ€ ๋œธ

 

const user = {

    name: '์ฒ ์ˆ˜',

    hobby: {

        a: 'game',

        b: 'music',

    },

}

const newUser = Object.assign({}, user);

newUser.hobby.a = 'book'; // user, newuser ๊ฐ™์ด ๋ฐ”๋€œ

newUser.name = '์˜ํฌ'; // 1๋‹จ๊ณ„ ์นดํ”ผ๋งŒ ๋˜์–ด newuser ๋งŒ ๋ฐ”๋€œ

console.log(user)

console.log(newUser)

console.log(user == newUser) // ์˜ํฌ๊นŒ์ง€, false

deep copy ๋Š” ์‹ค์ œ ๊ฐ’์„ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ณต์‚ฌํ•ด์„œ 1๋‹จ๊ณ„์—์„  ๊ฐ์ž ๋ฐ”๋€Œ์ง€๋งŒ ์ด์ค‘, ์‚ผ์ค‘ ๊ตฌ์กฐ๋กœ ๊ฐ€๊ฒŒ ๋˜๋ฉด ์‰๋„์šฐ ์นดํ”ผ๊ฐ€ ๋˜์–ด ๊ฐ™์ด ๋ฐ”๋€œ

 

- … ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž : ๋ณต์‚ฌํ•˜๊ณ  ์‹ถ์€ ๊ฐ์ฒด ์ด๋ฆ„ ์•ž์— ๋งŒ ์ ์–ด์ฃผ๋ฉด ๋ณต์‚ฌ

const item = {

    type: 101,

    color: {

        a: 'red',

        b: 'blue',

    },

};

const newItem = { ...item };

console.log(item) // type: 101~

console.log(newItem) // type: 101~

// ๋˜‘๊ฐ™์ด ๋‚˜์˜ด

 

newItem.type = 202;

console.log(item) // type: 101~

console.log(newItem) // type: 202~

// item.type ์€ ๋ฐ”๋€Œ์ง€ ์•Š์Œ

 

newItem.color.a = 'green';

console.log(item) // green

console.log(newItem) // green

// ๋‘๊ฐœ ๋‹ค ๋ฐ”๋€œ

deep copy ๋Š” ์‹ค์ œ ๊ฐ’์„ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ณต์‚ฌํ•ด์„œ 1๋‹จ๊ณ„์—์„  ๊ฐ์ž ๋ฐ”๋€Œ์ง€๋งŒ ์ด์ค‘, ์‚ผ์ค‘ ๊ตฌ์กฐ๋กœ ๊ฐ€๊ฒŒ ๋˜๋ฉด ์‰๋„์šฐ ์นดํ”ผ๊ฐ€ ๋˜์–ด ๊ฐ™์ด ๋ฐ”๋€œ

 

 

2. JSON

- ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ค„ ๋•Œ์˜ ์ž๋ฃŒํ˜•ํƒœ, ๊ฐ์ฒด์™€ ๋˜‘๊ฐ™์€ ๋ชจํ˜•, ํ‚ค๊ฐ’์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ํ”„๋กœํผํ‹ฐ ์ž…๋ ฅ

- stringify ๋ฉ”์„œ๋“œ์™€ parse ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์™„๋ฒฝํ•œ ์นดํ”ผ๊ฐ€ ๋จ

- ์ฒ˜์Œ๋ถ€ํ„ฐ parse ์“ฐ๋ฉด ๋˜์ง€ ์•Š๋‚˜? parse ๋Š” ๋ฌธ์ž์—ด์„ ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฑฐ๋ผ ๊ผญ stringify, parse ํ•ด์ค˜์•ผ ์™„๋ฒฝํ•˜๊ฒŒ ์นดํ”ผ๋จ

- ๋ฐฉ๋Œ€ํ•œ ์ž๋ฃŒ๋Š” ์œ ์šฉํ•˜์ง€ ์•Š์Œ ๋ Œ๋”๋ง ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋งŽ๋‹ค ํ•˜๋ฉด ์–ด์ฉ” ์ˆ˜ ์—†์ด ์‚ฌ์šฉ, ์•„์ฃผ ๋งŽ์ด ์”€ ๊ธฐ์–ตํ•ด๋‘˜๊ฒƒ

- ๋‹จ์ ์€ ํ•จ์ˆ˜, ๋ฉ”์„œ๋“œ๋Š” ์นดํ”ผ ์•ˆ๋จ ์–ธ๋””ํŒŒ์ธ๋“œ ๋‚˜์˜ด. ๋”ฐ๋ผ์„œ ์ž๋ฃŒํ˜•์€ ์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ ํ•จ์ˆ˜, ๋ฉ”์„œ๋“œ ๋“ค์–ด๊ฐ€๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊น€

 

1) JSON.stringify()

- JavaScript ๊ฐ’์ด๋‚˜ ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜. ์„ ํƒ์ ์œผ๋กœ, replacer๋ฅผ ํ•จ์ˆ˜๋กœ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ ๋ณ€ํ™˜ ์ „ ๊ฐ’์„ ๋ณ€ํ˜•ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐฐ์—ด๋กœ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ ์ง€์ •ํ•œ ์†์„ฑ๋งŒ ๊ฒฐ๊ณผ์— ํฌํ•จ

- ์˜ˆ์‹œ : JSON.stringify( value [, replacer [, space ] ] )

const obj = {

    name: '์ฒ ์ˆ˜',

    address: '์„œ์šธ',

    hobby: {

        a: 'game',

        b: 'music',

    }

}

 

// stringify

const newObj = JSON.stringify(obj);

console.log(newObj)

 // -> {"name":"์ฒ ์ˆ˜","address":"์„œ์šธ","hobby":{"a":"game","b":"music"}}

 

2) JSON.parse()

- JSON ๋ฌธ์ž์—ด์˜ ๊ตฌ๋ฌธ์„ ๋ถ„์„ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ์—์„œ JavaScript ๊ฐ’์ด๋‚˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ. ์„ ํƒ์ ์œผ๋กœ, reviver ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „์— ๋ณ€ํ˜• ๊ฐ€๋Šฅ

- ์˜ˆ์‹œ : JSON.parse( text [, reviver ] )

// parse

const newObj2 = JSON.parse(JSON.stringify(obj));

console.log(newObj2) // ๋ฌธ์ž์—ด -> ์˜ค๋ธŒ์ ํŠธ

 

 

3. map ๋ฐ˜๋ณต๋ฌธ

- foreach ์˜ ๊ฒฝ์šฐ ๊ฐ๊ฐ์˜ element ์— ํŽ‘์…˜์„ ele ํ•˜๋‚˜ํ•˜๋‚˜์— ์‹คํ–‰ํ•ด์ฃผ๋Š”๋ฐ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š์ง€๋งŒ map ์€ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์คŒ

- foreach ์™€ map ์˜ ์‚ฌ์šฉ๋ฒ•์€ ๋™์ผ :

[ ].forEach((ele,index,arr)=>{})

[ ].map((ele,index,arr)=>{})

 

const arr = [

    { id: 1, item: 'type1' },

    { id: 2, item: 'type2' },

    { id: 3, item: 'type3' },

    { id: 4, item: 'type4' },

    { id: 5, item: 'type5' },

]

 

arr.forEach((ele) => {

    console.log(ele)

});

 

arr.map((ele) => {

    console.log(ele)

});

 

- for๋ฌธ, ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ€์ฒดํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์•„์ฃผ ์œ ์šฉํ•˜๋‹ค

- react ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด์˜ ๋‚ด์žฅ ํ•จ์ˆ˜์ธ map( ) ์„ ์‚ฌ์šฉ

 

1) react ์— ์ ์šฉํ•œ foreach

const arr = [1, 2, 3];

let lis1 = arr.forEach((ele,key) => <li>{ele}</li>);

- foreach : 3๋ฒˆ์˜ ํ•จ์ˆ˜๊ฐ€ ์ ์šฉ. <li> [1] , <li> [2], <li> [3]. lis1 ๋ณ€์ˆ˜์— ์ €์žฅ. ํ•˜์ง€๋งŒ ๋ฆฌํ„ด ๊ฐ’์ด ์—†์–ด ์ถœ๋ ฅx

 

2) react ์— ์ ์šฉํ•œ map

const arr = [1, 2, 3];

let lis1 = arr.map((ele, key) => <li key={key}>{ele}</li>);

- map : ๋ฆฌํ„ด๊ฐ’์€ ํ•จ์ˆ˜ ์•ˆ์˜ ๊ฐ’์ด ๋ชจ๋‘ ๋ฆฌํ„ด, ์ถœ๋ ฅ

- ์œ„์—์„œ key ๋Š” ์–ด๋–ค ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€๋ณ€๊ฒฝํ•  ๋•Œ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ key ๊ฐ’์„ ์ ์šฉ

 

3) map ๋ฌธ์—์„œ key?

- map ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ผญ ๋“ค์–ด๊ฐ€์•ผ ํ•จ

- ๋˜‘ ๊ฐ™์€ ์š”์†Œ๊ฐ€ ๋ฐ˜๋ณตํ•ด์„œ ์ƒ๊ฒผ์„ ๋•Œ ๊ทธ ์ค‘ ์–ด๋–ค ์š”์†Œ์˜ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ๊ทธ ์š”์†Œ๋ฅผ ์‹๋ณ„ํ•ด์•ผ ํ•จ

- react ๋Š” ๊ฐ€์ƒ ๋”์„ ์ด์šฉํ•ด ๋‹ฌ๋ผ์ง„ ์†์„ฑ์„ ๋น„๊ตํ•ด์„œ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ๋˜‘๊ฐ™์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹๋ณ„์ž๋Š” ๋‹ฌ๋ผ์•ผ ํ•จ. ์ฆ‰, key ๊ฐ’์„ ์•ˆ ๋„ฃ์–ด์ฃผ๋ฉด ์—๋Ÿฌ๋‚˜๊ณ  ๋™์ž‘ ํ•˜์ง€ ์•Š์Œ

- ์–ด๋–ค ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ ๋ณ€๊ฒฝํ•  ๋•Œ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ key ๊ฐ’์„ ์ ์šฉํ•ด์•ผ ํ•จ

- key ๊ฐ’์€ ๊ณ ์œ ํ•œ ๊ฐ’์ด์–ด์•ผ ํ•จ, index ๊ฐ’์„ key ๊ฐ’์œผ๋กœ ์“ฐ๋ฉด ์•ˆ๋จ

- index ์™€ id ๋Š” ํ‹€๋ฆผ. index ๋Š” ๋ฒˆํ˜ธ, id ๋Š” ๊ณ ์œ ํ•œ key ๊ฐ’.

- ๋ฐ›์•„์˜จ ๊ฐ’๋“ค ์ค‘์—์„œ key ๊ฐ’์œผ๋กœ ์จ์•ผ ํ•˜๋Š”๋ฐ index ์˜ ๊ฒฝ์šฐ ์–ด๋–ค ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€ ๋์„ ๋•Œ index ๋ฒˆํ˜ธ๋Š” ์ˆ˜์ •๋  ์ˆ˜ ์žˆ์Œ.

- ๋”ฐ๋ผ์„œ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ๋ฒˆํ˜ธ๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ๊ณณ์— ์ ์šฉ๋  ์ˆ˜ ์žˆ์Œ ํ•˜์ง€๋งŒ id ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— key ๊ฐ’์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ

 

4. react ์— public ํด๋”?

์ด๋ฏธ์ง€ ํŒŒ์ผ src ์— ๋„ฃ์–ด๋„ ๋˜์ง€๋งŒ ์›๋ณธ ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ์–ด๋–ค ์†์ƒ๋„ ์ž…ํžˆ๊ณ  ์‹ถ์ง€ ์•Š๋‹ค ํ•˜๋ฉด ํผ๋ธ”๋ฆญ ํด๋”.

ํ•˜์ง€๋งŒ ํผ๋ธ”๋ฆญ์— ๋„ฃ์œผ๋ฉด ๋‚˜์ค‘์— ๋นŒ๋”ฉํ•  ๋•Œ ๋นŒ๋”ฉ ํŒŒ์ผ์— ๋ณต์‚ฌ๋˜์–ด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ์Œ

๋”ฐ๋ผ์„œ ํŠน๋ณ„ํ•˜๊ฒŒ ์ค‘์š”ํ•œ ํŒŒ์ผ์ด๋ฉด ํผ๋ธ”๋ฆญ ๋ณ„ ์ค‘์š”ํ•œ ํŒŒ์ผ์ด ์•„๋‹ˆ๋ฉด src