๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daehyunii's Dev-blog

์ปดํฌ๋„ŒํŠธ ๋ฐ˜๋ณต ๋ณธ๋ฌธ

๐Ÿ“š Language & CS knowledge/React

์ปดํฌ๋„ŒํŠธ ๋ฐ˜๋ณต

Daehyunii 2022. 12. 23. 02:09
map( ) ํ•จ์ˆ˜์˜ ํ™œ์šฉ
map ํ•จ์ˆ˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐฐ์—ด ๋‚ด ๊ฐ ์š”์†Œ๋ฅผ ์›ํ•˜๋Š” ๊ทœ์น™์— ๋”ฐ๋ผ ๋ณ€ํ™˜ํ•œ ํ›„ ๊ทธ ๊ฒฐ๊ณผ๋กœ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

 

map( ) ํ•จ์ˆ˜์˜ ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 
์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค.

์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ๋Š” (value, index, array) ์„ธ ๊ฐ€์ง€๋ฅผ ๋ฐ›๋Š”๋‹ค. 
-value: ํ˜„์žฌ ๋ฐ˜๋ณต๋˜๊ณ  ์žˆ๋Š” array์š”์†Œ ๊ฐ’
-index: ํ˜„์žฌ ๋ฐ˜๋ณต๋˜๊ณ  ์žˆ๋Š” array์š”์†Œ์˜ index๊ฐ’
-array: ํ˜„์žฌ ๋ฐ˜๋ณต๋˜๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด ๊ทธ ์ž์ฒด

ex) array.map((value,index,array) => { })
๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” callback ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  this ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ฐ›๋Š”๋‹ค.
const numbers = [1, 2, 3, 4, 5];

const doubleNumbers = numbers.map((v) => {
	return v * 2;
});

console.log(doubleNumbers); // [2, 4, 6, 8, 10];

 

  ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์„ค๋ช…๋ณด๋‹ค๋Š” ์˜ˆ์‹œ๋ฅผ ๋ณด๋Š”๊ฒƒ์ด ๋” ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šธ ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

 

const names = ['woo', 'park', 'kim', 'lee']
{names.map((name, index) => <li key={index}>{name}</li>};

 

  ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ˜๋ณต์„ ํ†ตํ•ด์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ JSX ์ฝ”๋“œ๋กœ ๋œ ๋ฐฐ์—ด์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ์— ๋ Œ๋”๋ง์„ ํ•˜๋ฉด ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€ map() ๋ฉ”์„œ๋“œ๋Š” ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. push๋ฉ”์„œ๋“œ์˜ ๊ฒฝ์šฐ์—๋Š” ์›๋ณธ ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ๋‘˜์˜ ์ฐจ์ด์ ์€ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์ด ์ƒ์„ฑ๋˜๋Š๋ƒ ์›๋ณธ ๋ฐฐ์—ด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š๋ƒ์ธ๋ฐ, ๋ฆฌ์•กํŠธ์—์„œ๋Š” ์ด ์ ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฆฌ์•กํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ค„ ๋•Œ๋Š” ํ•ญ์ƒ ์ƒˆ๋กœ์šด(New) ๋ฐ์ดํ„ฐ๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ๋ถˆ๋ณ€์„ฑ ์œ ์ง€๋ผ๊ณ  ํ•˜๋Š”๋ฐ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•ด ์ฃผ์–ด์•ผ ๋‚˜์ค‘์— ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, ๊ธฐ์กด DOM๊ณผ์˜ ๋น„๊ต๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋ผ๊ณ  ๋‚˜๋Š” ์ดํ•ดํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ map( )๋ฉ”์„œ๋“œ๋Š” ๋ฆฌ์•กํŠธ์—์„œ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. 

 

  ์—ฌ๊ธฐ์„œ ๋˜ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์ด ํ•œ ๊ฐ€์ง€ ์žˆ๋‹ค! ๋ฐ”๋กœ map( )์„ ํ†ตํ•ด ์ƒ์„ฑ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ ๋ฐฐ์—ด์€ prop์œผ๋กœ key๋ฅผ ์„ค์ •ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด key๋Š” ๊ณ ์œ ํ•œ ๊ฐ’์ด์–ด์•ผ ํ•œ๋‹ค. 

 

  key๋ฅผ ์™œ ์„ค์ •ํ•ด์•ผํ• ๊นŒ? key๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฆฌ์•กํŠธ Virtual DOM์„ ๋น„๊ตํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„๊ตํ•˜๋ฉด์„œ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•œ๋‹ค. ํ•˜์ง€๋งŒ key๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚ฌ๋Š”์ง€ ๋”์šฑ ๋น ๋ฅด๊ฒŒ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

  key๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ž์œ ๋กญ๊ฒŒ ์„ค์ •ํ•˜๋Š”๊ฒƒ์ด ์ข‹์ง€๋งŒ ๊ณ ์œ ํ•œ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•˜๋ฉฐ, index๋ฒˆํ˜ธ๋Š” ํ”ผํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค. ๋ฐฐ์—ด์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ์— ํšจ์œจ์ ์œผ๋กœ ๋ฆฌ๋ Œ๋”๋งํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ณ„๋„๋กœ id ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ด๋„ ์ข‹๊ณ , uidd ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด id๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

 

์ง€๊ธˆ๊นŒ์ง€ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ ๋ฐ˜๋ณต์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค๐Ÿ˜