ํ”„๋กœ๊ทธ๋ž˜๋ฐ/JavaScript

[JavaScript] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ˜๋ณต๋ฌธ for๋ฌธ์˜ ์ข…๋ฅ˜(for, for in, for of, forEach)

์šฉ๋‡ฝ 2021. 3. 7. 01:58
๋ฐ˜์‘ํ˜•

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ ‡๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ for๋ฌธ์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•œ ๊ธ€์„ ์ •๋ฆฌํ•˜๋Š” ์ด์œ ๋Š” ํ˜„์žฌ ๋‚˜์ค‘์— ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ค€๋น„ํ•˜๋ฉด์„œ for๋ฌธ์„ ์ž‘์„ฑํ•  ๋•Œ๊ฐ€ ๋งŽ์€๋ฐ, ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ for๋ฌธ์— ์ข…๋ฅ˜๊ฐ€ ๋‹ค์–‘ํ•˜๊ฒŒ ์žˆ๋Š” ๊ฑด ์•Œ์•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ œ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•œ for๋ฌธ์€ ๊ธฐ๋ณธ์ ์ธ for๋ฌธ๊ณผ forEach๋ฌธ๋งŒ ์ž์ฃผ ์‚ฌ์šฉํ•˜์˜€๊ณ , ๊ทธ ์™ธ์—๋Š” ๊ฑฐ์˜ ํ•œ ๋ฒˆ๋„ ์‚ฌ์šฉํ•ด ๋ณธ ์ ์ด ์—†์—ˆ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ for๋ฌธ๊ณผ ์ ‘์ด‰ ํ•ด๋ณด๋ฉด์„œ ๊ฐ๊ฐ์˜ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐ for๋ฌธ๋งˆ๋‹ค ์žฅ์ ์ด ์žˆ๊ณ , ์„ฑ๋Šฅ์˜ ์ฐจ์ด๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒˆ ๊ธฐํšŒ์— ํ™•์‹คํ•˜๊ฒŒ ์•Œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š” ์ •๋„์ธ์ง€์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•œ๋‹ค.

๐Ÿ’ก ์•Œ์•„๋ณผ ๊ฒƒ๋“ค

  1. (์ „ํ˜•์ ์ธ) for
  2. for in
  3. for of
  4. forEach

1. for

์ฒซ๋ฒˆ์งธ๋กœ ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์•Œ๊ณ  ์žˆ๋Š” for๋ฌธ์ด๋‹ค.

์–ด๋–ค ํŠน์ •ํ•œ ์กฐ๊ฑด์ด ๊ฑฐ์ง“(false)์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

for๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

for ([์ดˆ๊ธฐ๋ฌธ]; [์กฐ๊ฑด๋ฌธ]; [์ฆ๊ฐ๋ฌธ]) {์ˆ˜ํ–‰ํ•  ๊ฒƒ}

[์ดˆ๊ธฐ๋ฌธ] ๋ถ€๋ถ„์—์„œ ์ดˆ๊ธฐํ™” ๊ตฌ๋ฌธ์ธ ์ดˆ๊ธฐ๋ฌธ์ด ์กด์žฌํ•œ๋‹ค๋ฉด ์ดˆ๊ธฐ๋ฌธ์ด ์‹คํ–‰๋œ๋‹ค.

์ด ํ‘œํ˜„์€ ๋ณดํ†ต 1์ด๋‚˜ ๋ฐ˜๋ณต๋ฌธ ์นด์šดํ„ฐ๋กœ ์ดˆ๊ธฐ ์„ค์ •์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณต์žกํ•œ ๊ตฌ๋ฌธ์œผ๋กœ ํ‘œํ˜„๋  ๋•Œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋˜๊ธฐ๋„ ํ•œ๋‹ค.

 

[์กฐ๊ฑด๋ฌธ] ๋ถ€๋ถ„์—์„œ๋Š” ์กฐ๊ฑด๋ฌธ์€ ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•œ๋‹ค.

๋งŒ์•ฝ ์กฐ๊ฑด๋ฌธ์ด ์ฐธ(true)์ด๋ผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์€ ๊ณ„์† ์‹คํ–‰๋˜๊ณ , ๊ฑฐ์ง“์ด๋ผ๋ฉด for ๋ฐ˜๋ณต๋ฌธ์€ ์ข…๋ฃŒํ•˜๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ ๊ทธ ์กฐ๊ฑด๋ฌธ์ด ์ƒ๋žต๋œ๋‹ค๋ฉด, ๊ทธ ์กฐ๊ฑด๋ฌธ์€ ์ฐธ์œผ๋กœ ์ถ”์ •๋œ๋‹ค.

 

[์ฆ๊ฐ๋ฌธ] ๋ถ€๋ถ„์—์„œ๋Š” ์ดˆ๊ธฐ๋ฌธ์—์„œ ์ž‘์„ฑํ•œ ์นด์šดํ„ฐ๊ฐ€ for๋ฌธ์ด ๋ฐ˜๋ณต๋  ๋•Œ๋งˆ๋‹ค ์ฆ๊ฐํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ˆ˜ํ–‰์‹œํ‚ฌ ์ฝ”๋“œ๋ฅผ { } ๋Œ€๊ด„ํ˜ธ๋ฅผ ์ž‘์„ฑํ•ด์„œ ๊ทธ ์•ˆ์— ์ž‘์„ฑํ•˜๋ฉด { } ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋“ค์ด ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ์‹คํ–‰๋œ๋‹ค.

 

์žฅ์ :

1. ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค.

2. ๋ชจ๋“  ์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

3. ๋ฐ˜๋ณต๋ฌธ ๊ฑด๋„ˆ๋›ฐ๊ธฐ(continue), ์ข…๋ฃŒ(break)๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

4. ๋ณ€์ˆ˜ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์˜ˆ์‹œ:

for (let i = 0; i < 10; i++) {
	console.log(i);	
}
//์ถœ๋ ฅ ๊ฒฐ๊ณผ 0 1 2 3 4 5 6 7 8 9

์ž์„ธํ•œ ๋งํฌ:

developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/for</a ></span >

2. for...in

for in ๋ฌธ์˜ ํŠน์ง•์€ ๊ฐ์ฒด์˜ ์—ด๊ฑฐ ์†์„ฑ์„ ํ†ตํ•ด ์ง€์ •๋œ ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

์ฆ‰, ๊ฐ์ฒด์— ์ ‘๊ทผํ•ด์„œ ๊ฐ์ฒด์˜ ๊ฐ’๋“ค์„ for in ๋ฌธ์œผ๋กœ ํ†ตํ•ด ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ๊ฐ์˜ ๊ณ ์œ ํ•œ ์†์„ฑ์— ๋Œ€ํ•ด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ง€์ •๋œ ์ˆ˜ํ–‰๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค.

 

์žฅ์ :

1. ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ๊ฐ์ฒด์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜์—ฌ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ๋ฐ˜</span >๋ณต๋ฌธ ๊ฑด๋„ˆ๋›ฐ๊ธฐ(continue), ์ข…๋ฃŒ(break)๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

ํ•˜์ง€๋งŒ ๊ฐ์ฒด์— ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ๋งŒํผ for ๋ฐ˜๋ณต๋ฌธ๋“ค ์ค‘ ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ์ œ์ผ ์†๋„๊ฐ€ ๋Š๋ฆฌ๊ณ  ์ข‹์ง€ ๋ชปํ•˜๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋„ ์›ฌ๋งŒํ•˜๋ฉด for..in๋ฌธ์€ ํŠน์ •ํ•œ ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ฉด ํ”ผํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

for ( ๋ณ€์ˆ˜ in ๊ฐ์ฒด ) {์ˆ˜ํ–‰ํ•  ๊ฒƒ๋“ค}

์œ„์™€ ๊ฐ™์ด for in๋ฌธ์— '๊ฐ์ฒด'๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ์ž‘์„ฑํ•œ '๋ณ€์ˆ˜'์—๋Š” ๊ฐ์ฒด์˜ ๊ฐ’์ด ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฝ‘ํ˜€์„œ '๋ณ€์ˆ˜'์— ๊ฐ์ฒด์˜ key๊ฐ’์ด ๋‹ด์•„์ง€๋ฉด์„œ ๊ฐ์ฒด ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.</span >

 

์˜ˆ์‹œ:

const obj = {
    a: 1,
    b: 2,
    c: 3
};

for (let i in obj) {
	console.log(i, obj[i]); 
}
//์ถœ๋ ฅ๊ฒฐ๊ณผ a 1, b 2, c 3

์ž์„ธํ•œ ๋งํฌ:

developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/for...in</a ></span >

 

for...in - JavaScript | MDN

for...in for...in๋ฌธ์€ ์ƒ์†๋œ ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•œ ์†์„ฑ๋“ค์„ ํฌํ•จํ•˜์—ฌ ๊ฐ์ฒด์—์„œ ๋ฌธ์ž์—ด๋กœ ํ‚ค๊ฐ€ ์ง€์ •๋œ ๋ชจ๋“  ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•œ ์†์„ฑ์— ๋Œ€ํ•ด ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. (Symbol๋กœ ํ‚ค๊ฐ€ ์ง€์ •๋œ ์†์„ฑ์€ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.) The source for this in

developer.mozilla.org

3. for...of

for of ๋ฐ˜๋ณต๋ฌธ์€ ES6์— ์ถ”๊ฐ€๋œ ์ƒˆ๋กœ์šด ๋ฐ˜๋ณต๋ฌธ์ด๋‹ค.

๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด(๋ฐฐ์—ด, ๋ฌธ์ž์—ด, Map, Set, ๋“ฑ ํฌํ•จ)๋ฅผ ํ†ตํ•ด ๋ฐ˜๋ณต๋ฌธ์„ ๋งŒ๋“ ๋‹ค.

 

์žฅ์ : 

1. ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ฐ˜๋ณต๋ฌธ ์ž‘์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.

2. ์„ฑ๋Šฅ๋ฉด์—์„œ๋„ ์ค€์ˆ˜ํ•˜๋‹ค.

3. ๋ฐ˜๋ณต๋ฌธ ๊ฑด๋„ˆ๋›ฐ๊ธฐ(continue), ์ข…๋ฃŒ(break)๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

for (๋ณ€์ˆ˜ of ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด) {์ˆ˜ํ–‰ํ•  ๊ฒƒ}

์˜ˆ๋ฅผ ๋“ค์–ด '๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด'์— ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด๋„ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๊บผ๋‚ด์„œ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ์‹œ:

const str = 'hello';

for (let s of str) {
	console.log(s);
}
//์ถœ๋ ฅ๊ฒฐ๊ณผ: h, e, l, l, o

์œ„์™€ ๊ฐ™์ด ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด์„œ ๋ฐ˜๋ณต๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒˆ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ ๋ฌธ์ž์—ด ๋น„๊ต ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด for of๋ฌธ์„ ์ž์ฃผ ํ™œ์šฉํ–ˆ๋‹ค.</span >

 

์ž์„ธํ•œ ๋งํฌ:

developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/for...of</a ></span >

4. forEach

ES5๋ฌธ๋ฒ•์ธ forEach() ๋ฉ”์„œ๋“œ๋‹ค. 

์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ๋ฐฐ์—ด ์š”์†Œ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

์žฅ์ :

1. ์ฝ”๋“œ๊ฐ€ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์‰ฝ๊ณ  ๊ฐ„๊ฒฐํ•˜๋‹ค.

2. ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ๋„ ๋งค์šฐ ์ค€์ˆ˜ํ•˜๋‹ค.

3. ์—ฌ๋Ÿฌ ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ™œ์šฉ๋„๊ฐ€ ๋†’๋‹ค.

 

๋‹ค๋ฅธ for ๋ฐ˜๋ณต๋ฌธ๋ณด๋‹ค ์ž‘์„ฑํ•˜๊ธฐ๋„ ์‰ฝ๊ณ  ์ฝ”๋“œ๊ฐ€ ํ•œ๋ˆˆ์— ๋“ค์–ด์™€์„œ ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— forEach๋ฌธ์€ ํŠน์ •ํ•œ ์ƒํ™ฉ์ด ์•„๋‹Œ ์ด์ƒ ์›ฌ๋งŒํ•˜๋ฉด ์ œ๊ฐ€ ์ •๋ง ์ž์ฃผ ์• ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฑด๋„ˆ๋›ฐ๊ธฐ(continue), ์ข…๋ฃŒ(break)๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋‹ค.

 

์˜ˆ์‹œ:

const array = [1,2,3,4,5]

array.forEach(item => console.log(item));
//์ถœ๋ ฅ๊ฒฐ๊ณผ: 1, 2, 3, 4, 5

๋”ฑํžˆ ๋‹ค๋ฅธ ์„ค๋ช…์ด ์—†์–ด๋„ ๋ฐ”๋กœ ๋ˆˆ์— ๋“ค์–ด์˜ค์ง€ ์•Š๋‚˜์š”?

 

์ž์„ธํ•œ ๋‚ด์šฉ:

developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach</a ></span >

๐Ÿ“• ๋งˆ๋ฌด๋ฆฌ

๋งˆ๋ฌด๋ฆฌ๋ฅผ ์ง€์œผ๋ฉด์„œ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ˜๋ณต๋ฌธ์— ๋Œ€ํ•œ ๋ฒค์น˜๋งˆํ‚น ํ…Œ์ŠคํŠธ ์‚ฌ์ดํŠธ์ด๋‹ค.

jsben.ch/giRjy

 

JSBEN.CH Performance Benchmarking Playground for JavaScript

 

jsben.ch

๊ฐ for๋ฌธ์— ๋Œ€ํ•ด์„œ ์„ธ๋ถ€์ ์œผ๋กœ ์ •๋ฆฌํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋Œ€๋žต ์–ด๋–ค ์—ญํ• ์„ ํ•˜๊ณ  ์–ด๋–ค ์ƒํ™ฉ์— ์‚ฌ์šฉ์„ ํ•˜๋ฉด ์ข‹์„ ์ง€์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.

 

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

 

๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‚ด์šฉ ๊ฒ€์ƒ‰ ๊ด€๋ จํ•ด์„œ๋Š” MDN ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ œ์ผ ๋จผ์ € ์ฐธ๊ณ ํ•˜๋Š” ๊ฒŒ ๋„์›€์ด ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๋ฐ˜์‘ํ˜•