๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Language/Javascript

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ]์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฃจํ”„ ์™„์ „ ์ •๋ณต: ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ๋ฒ•๊ณผ ํŒ

by YJ Dev 2024. 6. 15.
728x90
๋ฐ˜์‘ํ˜•
SMALL

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐ˜๋ณต๋ฌธ์€ ํ•„์ˆ˜์ ์ธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋ฌธ์€ ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ˜๋ณต๋ฌธ์„ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ˜๋ณต๋ฌธ


๋ฐ˜๋ณต๋ฌธ์€ ์กฐ๊ฑด๋ฌธ๊ณผ ์ž์ฃผ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š” ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! ๐Ÿ‘€

" "

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ]์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์กฐ๊ฑด๋ฌธ ์™„์ „ ์ •๋ณต: ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค์ „๊นŒ์ง€ ํ•œ ๋ฒˆ์— ๋ฐฐ์šฐ๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์กฐ๊ฑด๋ฌธ์€ ๋กœ์ง์„ ์ œ์–ดํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด๋ฌธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ , ์ดˆ๋ณด์ž๋„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์ œ์™€ ์‹ค์Šต์„ ํ†ตํ•ด ํ™œ

creativevista.tistory.com


๊ธฐ๋ณธ ๊ฐœ๋…๐Ÿ“š

๋ฐ˜๋ณต๋ฌธ์ด๋ž€?: ๋ฐ˜๋ณต๋ฌธ์€ ํŠน์ • ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๊ณ  ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์™œ ํ•„์š”ํ•œ๊ฐ€?: ๋ฐ˜๋ณต๋ฌธ์€ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ๋™์ผํ•œ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜, ํŠน์ • ์กฐ๊ฑด์ด ๋งŒ์กฑ๋  ๋•Œ๊นŒ์ง€ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ˜๋ณต๋ฌธ์˜ ์ข…๋ฅ˜๐Ÿ”„

for ๋ฌธ

  • ๋ฌธ๋ฒ• ์„ค๋ช…: for ๋ฌธ์€ ์ดˆ๊ธฐํ™”, ์กฐ๊ฑด, ์ฆ๊ฐ ์„ธ ๊ฐ€์ง€ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
for (initialization; condition; increment) {
    // ์‹คํ–‰ํ•  ์ฝ”๋“œ
}
  • ์‚ฌ์šฉ ์˜ˆ์ œ: ์•„๋ž˜ ์˜ˆ์ œ๋Š” 0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
for (let i = 0; i < 10; i++) {
  console.log(i);
}
  • ์žฅ๋‹จ์ : ๋ช…ํ™•ํ•œ ๊ตฌ์กฐ๋กœ ์ธํ•ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ๋ณต์žกํ•œ ์กฐ๊ฑด์—์„œ๋Š” ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

while ๋ฌธ

  • ๋ฌธ๋ฒ• ์„ค๋ช…: while ๋ฌธ์€ ์กฐ๊ฑด์ด ์ฐธ์ธ ๋™์•ˆ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
while (condition) {
    // ์‹คํ–‰ํ•  ์ฝ”๋“œ
}
  • ์‚ฌ์šฉ ์˜ˆ์ œ: ์•„๋ž˜ ์˜ˆ์ œ๋Š” 0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
let i = 0;
while (i < 10) {
  console.log(i);
  i++;
}
  • ์žฅ๋‹จ์ : ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฐ˜๋ณต ํšŸ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์งˆ ๋•Œ ์œ ์šฉํ•˜์ง€๋งŒ, ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์งˆ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

do...while ๋ฌธ

  • ๋ฌธ๋ฒ• ์„ค๋ช…: do...while ๋ฌธ์€ ์ฝ”๋“œ ๋ธ”๋ก์„ ์ตœ์†Œํ•œ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•œ ํ›„ ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
do {
    // ์‹คํ–‰ํ•  ์ฝ”๋“œ
} while (condition);
  • ์‚ฌ์šฉ ์˜ˆ์ œ: ์•„๋ž˜ ์˜ˆ์ œ๋Š” 0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
let i = 0;
do {
  console.log(i);
  i++;
} while (i < 10);
  • ์žฅ๋‹จ์ : ์ตœ์†Œํ•œ ํ•œ ๋ฒˆ์€ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

for...in ๋ฌธ

    • ๋ฌธ๋ฒ• ์„ค๋ช…: for...in ๋ฌธ์€ ๊ฐ์ฒด์˜ ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•œ ์†์„ฑ์„ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค.
for (variable in object) {
    // ์‹คํ–‰ํ•  ์ฝ”๋“œ
}
  • ์‚ฌ์šฉ ์˜ˆ์ œ: ์•„๋ž˜ ์˜ˆ์ œ๋Š” ๊ฐ์ฒด์˜ ํ‚ค์™€ ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
const obj = { a: 1, b: 2, c: 3 };
for (let key in obj) {
  console.log(key, obj[key]);
}
  • ์žฅ๋‹จ์ : ๊ฐ์ฒด ์ˆœํšŒ์— ์œ ์šฉํ•˜์ง€๋งŒ, ๋ฐฐ์—ด์—๋Š” ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

for...of ๋ฌธ

  • ๋ฌธ๋ฒ• ์„ค๋ช…: for...of ๋ฌธ์€ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด(๋ฐฐ์—ด ๋“ฑ)๋ฅผ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค.
for (variable of iterable) {
    // ์‹คํ–‰ํ•  ์ฝ”๋“œ
}
  • ์‚ฌ์šฉ ์˜ˆ์ œ: ์•„๋ž˜ ์˜ˆ์ œ๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
const arr = [1, 2, 3];
for (let value of arr) {
  console.log(value);
}
  • ์žฅ๋‹จ์ : ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

forEach ๋ฌธ

  • ๋ฌธ๋ฒ• ์„ค๋ช…: forEach ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ œ๊ณต๋œ ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
for (variable of iterable) {
    // ์‹คํ–‰ํ•  ์ฝ”๋“œ
}
  • ์‚ฌ์šฉ ์˜ˆ์ œ: ์•„๋ž˜ ์˜ˆ์ œ๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
const arr = [1, 2, 3];
arr.forEach(value => console.log(value));
  • ์žฅ๋‹จ์ : ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ๊ฐ„๋‹จํžˆ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ค‘๊ฐ„์— ๋ฐ˜๋ณต์„ ๋ฉˆ์ถœ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

map ๋ฉ”์„œ๋“œ

  • ๋ฌธ๋ฒ• ์„ค๋ช…: map ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ๋ณ€ํ™˜ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
const newArray = array.map(function(element, index, array) {
    // ๋ฐ˜ํ™˜ํ•  ๊ฐ’
});
  • ์‚ฌ์šฉ ์˜ˆ์ œ: ์•„๋ž˜ ์˜ˆ์ œ๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ๋‘ ๋ฐฐ๋กœ ๋งŒ๋“  ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
const arr = [1, 2, 3];
const newArr = arr.map(value => value * 2);
console.log(newArr);
  • ์žฅ๋‹จ์ : ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ๋ณ€ํ™˜ํ•˜์—ฌ ์ƒˆ ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

Q: forEach์™€ map์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ผ๊นŒ์š”?

A: forEach๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์ง€๋งŒ, ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, map์€ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ๋ณ€ํ™˜ํ•œ ์ƒˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


๋ฐ˜๋ณต๋ฌธ ํ™œ์šฉ ์‚ฌ๋ก€๐Ÿ› ๏ธ

๋ฐฐ์—ด ์ˆœํšŒ: ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜, ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

const arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}


๊ฐ์ฒด ์ˆœํšŒ: ๊ฐ์ฒด์˜ ํ‚ค์™€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜, ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ์†์„ฑ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

const obj = { a: 1, b: 2, c: 3 };
for (let key in obj) {
  console.log(`${key}: ${obj[key]}`);
}


๋น„๋™๊ธฐ ์ž‘์—…์—์„œ์˜ ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ: ๋น„๋™๊ธฐ ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

async function fetchData(urls) {
  for (let url of urls) {
    // ๊ฐ URL์— ๋Œ€ํ•ด HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆผ
    let response = await fetch(url);
    // ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆผ
    let data = await response.json();
    // ๋ณ€ํ™˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅ
    console.log(data);
  }
}

๊ณ ๊ธ‰ ํ™œ์šฉ ๋ฐ ์ตœ์ ํ™”๐Ÿš€

์ค‘์ฒฉ ๋ฃจํ”„

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ค‘์ฒฉ ๋ฃจํ”„, ์ฆ‰ ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์€ 2์ฐจ์› ๋ฐฐ์—ด์ด๋‚˜ ๋‹ค์ค‘ ์กฐ๊ฑด์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

const matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];
for (let i = 0; i < matrix.length; i++) {
  for (let j = 0; j < matrix[i].length; j++) {
    console.log(matrix[i][j]);
  }
}

์„ฑ๋Šฅ ์ตœ์ ํ™”

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ˜๋ณต๋ฌธ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ฑ์Šค ์บ์‹ฑ, ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ ์ œ๊ฑฐ, ์ ์ ˆํ•œ ๋ฐ˜๋ณต๋ฌธ ์„ ํƒ ๋“ฑ์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

1. ์ธ๋ฑ์Šค ์บ์‹ฑ (Index Caching)

๋ฐ˜๋ณต๋ฌธ์—์„œ ๋ฐฐ์—ด์˜ ๊ธธ์ด ๋˜๋Š” ๋‹ค๋ฅธ ๋ฐ˜๋ณต ๊ณ„์‚ฐ์ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ๋ฐ˜๋ณต๋ฌธ ์™ธ๋ถ€์— ์บ์‹ฑํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ

์บ์‹ฑ ์ „:

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (let i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}


์บ์‹ฑ ํ›„:

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const length = arr.length;
for (let i = 0; i < length; i++) {
    console.log(arr[i]);
}

arr.length๋ฅผ ๋ฐ˜๋ณต๋ฌธ ์™ธ๋ถ€์—์„œ ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•˜์—ฌ length ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ , ์ด๋ฅผ ๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.


2. ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ ์ œ๊ฑฐ (Eliminate Unnecessary Calculations)

๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ„์‚ฐ๋˜๋Š” ๊ฐ’์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜์—ฌ ๋ณ€์ˆ˜์— ์ €์žฅํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ

๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ:

const arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {
    console.log(arr[i] * Math.sqrt(arr.length));
}


๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ ์ œ๊ฑฐ ํ›„:

const arr = [1, 2, 3, 4, 5];
const sqrtLength = Math.sqrt(arr.length);
for (let i = 0; i < arr.length; i++) {
    console.log(arr[i] * sqrtLength);
}

๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์—์„œ Math.sqrt(arr.length)๋ฅผ ๋งค๋ฒˆ ๊ณ„์‚ฐํ•˜๋Š” ๋Œ€์‹ , ์ด๋ฅผ ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•˜์—ฌ sqrtLength ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋ฉด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.


3. ์ ์ ˆํ•œ ๋ฐ˜๋ณต๋ฌธ ์„ ํƒ (Choose Appropriate Loop)

์ ์ ˆํ•œ ๋ฐ˜๋ณต๋ฌธ์„ ์„ ํƒํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฐ์—ด์„ ๋‹จ์ˆœํžˆ ์ˆœํšŒํ•  ๋•Œ๋Š” for ๋ฃจํ”„๋ณด๋‹ค forEach, for...of ๋˜๋Š” ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ

์ผ๋ฐ˜ for ๋ฃจํ”„:

const arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}


forEach ์‚ฌ์šฉ:

const arr = [1, 2, 3, 4, 5];
arr.forEach(value => {
    console.log(value);
});


for...of ์‚ฌ์šฉ:

const arr = [1, 2, 3, 4, 5];
for (const value of arr) {
    console.log(value);
}

์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด ์ˆœํšŒ์—์„œ๋Š” forEach๋‚˜ for...of๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ , ๋‚ด๋ถ€ ์ตœ์ ํ™” ๋•๋ถ„์— ์„ฑ๋Šฅ์ด ๋” ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


4. ๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์˜ DOM ์กฐ์ž‘ ์ตœ์†Œํ™”

DOM ์กฐ์ž‘์€ ๋งค์šฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์—์„œ DOM ์กฐ์ž‘์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ํ•œ ๋ฒˆ์— ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ

๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์˜ DOM ์กฐ์ž‘:

const items = ['Item1', 'Item2', 'Item3'];
const list = document.getElementById('list');
for (let i = 0; i < items.length; i++) {
    const listItem = document.createElement('li');
    listItem.textContent = items[i];
    list.appendChild(listItem);
}


DOM ์กฐ์ž‘ ์ตœ์†Œํ™”:

const items = ['Item1', 'Item2', 'Item3'];
const list = document.getElementById('list');
const fragment = document.createDocumentFragment();
for (let i = 0; i < items.length; i++) {
    const listItem = document.createElement('li');
    listItem.textContent = items[i];
    fragment.appendChild(listItem);
}
list.appendChild(fragment);

DOM ์กฐ์ž‘์„ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก DocumentFragment๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.


5. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

๊ฐ์ฒด ์ƒ์„ฑ์ด๋‚˜ ๋ฐฐ์—ด ๋ณต์‚ฌ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ , ํ•„์š” ์—†๋Š” ๋ณ€์ˆ˜๋Š” ์ ์‹œ์— ํ•ด์ œํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ:

const largeArray = new Array(1000000).fill(0);

// ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ž‘์—…
const processed = largeArray.map((val, idx) => idx % 2 === 0 ? val + 1 : val);

// ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
largeArray.length = 0;

ํ•„์š” ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ ์‹œ์— ํ•ด์ œํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋ฐ˜๋ณต๋ฌธ ๋Œ€์ฒด ๊ธฐ๋ฒ•

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ณ ์ฐจ ํ•จ์ˆ˜(map, filter, reduce)๋‚˜ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const arr = [1, 2, 3, 4, 5];
const doubled = arr.map(value => value * 2);
console.log(doubled);


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ filter์™€ reduce ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ๋งค์šฐ ์œ ์šฉํ•œ ๊ณ ์ฐจ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฐ ํ•จ์ˆ˜์˜ ๋ฌธ๋ฒ•๊ณผ ์‚ฌ์šฉ ์˜ˆ์ œ๋ฅผ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

filter ํ•จ์ˆ˜

filter ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ํ…Œ์ŠคํŠธํ•˜์—ฌ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๋“ค๋กœ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋ฌธ๋ฒ•

const newArray = array.filter((element, index, array) => {
    // ์กฐ๊ฑด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฝ”๋“œ
});
  • element: ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ.
  • index: ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ์˜ ์ธ๋ฑ์Šค (์„ ํƒ ์‚ฌํ•ญ).
  • array: filter๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด (์„ ํƒ ์‚ฌํ•ญ).

์˜ˆ์ œ

const numbers = [1, 2, 3, 4, 5, 6];
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4, 6]

์œ„ ์˜ˆ์ œ์—์„œ๋Š” ๋ฐฐ์—ด numbers์—์„œ ์ง์ˆ˜๋งŒ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด evenNumbers๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.


reduce ํ•จ์ˆ˜

reduce ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ๋ฆฌ๋“€์„œ(reducer) ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋‹จ์ผ ์ถœ๋ ฅ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ๋ฒ•

const result = array.reduce((accumulator, element, index, array) => {
    // ๋ˆ„์‚ฐ๊ธฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฝ”๋“œ
}, initialValue);
  • accumulator: ๋ˆ„์‚ฐ๊ธฐ, ์ด์ „ ์š”์†Œ๋“ค์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • element: ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ.
  • index: ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ์˜ ์ธ๋ฑ์Šค (์„ ํƒ ์‚ฌํ•ญ).
  • array: reduce๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด (์„ ํƒ ์‚ฌํ•ญ).
  • initialValue: ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ๊ฐ’์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, currentValue) => acc + currentValue, 0);
console.log(sum); // 15

์œ„ ์˜ˆ์ œ์—์„œ๋Š” ๋ฐฐ์—ด numbers์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋”ํ•˜์—ฌ sum์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 0์€ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ์ˆœ์„œ

์œ„ ์˜ˆ์ œ์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ์ดˆ๊ธฐ ์ƒํƒœ:

  • acc (๋ˆ„์‚ฐ๊ธฐ) = 0 (์ดˆ๊ธฐ๊ฐ’)
  • currentValue = ์ฒซ ๋ฒˆ์งธ ์š”์†Œ (1)

2. ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต:

  • ๊ณ„์‚ฐ: acc + currentValue => 0 + 1 => 1
  • ๋ˆ„์‚ฐ๊ธฐ(acc)์˜ ์ƒˆ๋กœ์šด ๊ฐ’: 1
  • ๋‹ค์Œ currentValue = ๋‘ ๋ฒˆ์งธ ์š”์†Œ (2)

3. ๋‘ ๋ฒˆ์งธ ๋ฐ˜๋ณต:

  • ๊ณ„์‚ฐ: acc + currentValue => 1 + 2 => 3
  • ๋ˆ„์‚ฐ๊ธฐ(acc)์˜ ์ƒˆ๋กœ์šด ๊ฐ’: 3
  • ๋‹ค์Œ currentValue = ์„ธ ๋ฒˆ์งธ ์š”์†Œ (3)

4. ์„ธ ๋ฒˆ์งธ ๋ฐ˜๋ณต:

  • ๊ณ„์‚ฐ: acc + currentValue => 3 + 3 => 6
  • ๋ˆ„์‚ฐ๊ธฐ(acc)์˜ ์ƒˆ๋กœ์šด ๊ฐ’: 6
  • ๋‹ค์Œ currentValue = ๋„ค ๋ฒˆ์งธ ์š”์†Œ (4)

5. ๋„ค ๋ฒˆ์งธ ๋ฐ˜๋ณต:

  • ๊ณ„์‚ฐ: acc + currentValue => 6 + 4 => 10
  • ๋ˆ„์‚ฐ๊ธฐ(acc)์˜ ์ƒˆ๋กœ์šด ๊ฐ’: 10
  • ๋‹ค์Œ currentValue = ๋‹ค์„ฏ ๋ฒˆ์งธ ์š”์†Œ (5)

6. ๋‹ค์„ฏ ๋ฒˆ์งธ ๋ฐ˜๋ณต:

  • ๊ณ„์‚ฐ: acc + currentValue => 10 + 5 => 15
  • ๋ˆ„์‚ฐ๊ธฐ(acc)์˜ ์ƒˆ๋กœ์šด ๊ฐ’: 15

7. ๋ฐ˜๋ณต ์ข…๋ฃŒ:

  • ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌํ–ˆ์œผ๋ฏ€๋กœ reduce ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
  • ์ตœ์ข… ๊ฒฐ๊ณผ๋Š” 15์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๋‚ด์šฉ๐Ÿ‘€

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ˜๋ณต๋ฌธ

728x90
๋ฐ˜์‘ํ˜•
LIST