Three.js: ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณผ๊นŒ์š”?

์— ๋งŒ๋“  2018๋…„ 07์›” 19์ผ  ยท  16์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mrdoob/three.js

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ฒŒ๋ ˆ ํ†ต์กฐ๋ฆผ์„ ์—ฌ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ [์Šคํƒ€์ผ ๊ฐ€์ด๋“œ]๊ฐ€ ์•ฝ๊ฐ„ ์˜ค๋ž˜๋œ ๊ฒƒ ๊ฐ™๊ณ  2๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ œ์•ˆํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

const ๋ฐ let ๋ฅผ var ์„ ํ˜ธํ•ฉ๋‹ˆ๊นŒ?

var ๊ฐ€ ์„ ํ˜ธ๋˜๋Š” ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค(์ตœ๊ทผ PR์—์„œ var๋กœ ๋ณ€๊ฒฝํ•˜๋ผ๊ณ  ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค). ๋‚ด ์ƒ๊ฐ์—๋Š” ๊ทธ๊ฒƒ์ด ์‹œ์ž‘๋œ ๊ณณ์ด๊ณ  const ๋ฐ let ๊ฐ€ ์ƒˆ๋กญ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ ๊ทธ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์ด ES5 ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— var ๋ฅผ ์œ ์ง€ํ•  ์ด์œ ๊ฐ€ ์‚ฌ๋ผ์ง„ ์ง€ ์˜ค๋ž˜์ž…๋‹ˆ๋‹ค. import ํ–‰ ๋•Œ๋ฌธ์— var ๋งŒ ์ง€์›ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฝ”๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋ ค๋ฉด ์ฝ”๋“œ๋ฅผ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ณ€ํ™˜๊ธฐ๋Š” ์ด๋ฏธ const ๋ฐ let ์„ var ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ let ๋ณด๋‹ค var const ๋ฐ let ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ฐ๊ด€์ ์ธ ๊ธ์ •์ ์ธ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ํ•จ์ˆ˜ ๋ฒ”์œ„ ๋Œ€์‹  ์ค‘๊ด„ํ˜ธ๋กœ ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. var ์™€ ๋‹ฌ๋ฆฌ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก , ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋Š” ํ˜„์žฌ var (IIRC eslint๊ฐ€ ์ž๋™์œผ๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ์ง€๋งŒ). const ๋ฐ let ๊ฐ€ ํ•„์š”ํ•˜๋„๋ก ๋ฆฐํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์ฒœ์ฒœํžˆ ๋ณ€๊ฒฝํ•˜๋ฉด ๋” ๋งŽ์€ ์˜ค๋ฅ˜์™€ ๋ˆ„์ถœ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ const ๋ฐ let ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ •์˜๋˜์ง€ ์•Š์€ ๋” ๋งŽ์€ ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•˜๋Š” eslint๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์–ด ์ ์–ด๋„ ์ €์—๊ฒŒ๋Š” ํฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

var ๊ฐ€ ๋” ๋นจ๋ž๋˜ ๋•Œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ๊ทธ ์‹œ๊ฐ„์€ ์˜ค๋ž˜ ์ „์— ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

var ์‚ฌ์šฉ์„ ์ค‘๋‹จํ•  ๋•Œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๋Ÿฌ ์ค„ ๋ฐฐ์—ด ๋ฐ ๊ฐ์ฒด์— ํ›„ํ–‰ ์‰ผํ‘œ ํ—ˆ์šฉ

์ด๊ฒƒ์€ Mr. Doob์˜ ๊ฐœ์ธ์ ์ธ ์ทจํ–ฅ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ œ ์ถ”์ธก์œผ๋กœ๋Š” IE ์‹œ์ ˆ๋ถ€ํ„ฐ ๋‚จ๊ฒจ์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. IE๋Š” ํ›„ํ–‰ ์‰ผํ‘œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ด์ œ ํŠธ๋žœ์ŠคํŒŒ์ผ์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ IE ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์—์„œ ํ›„ํ–‰ ์‰ผํ‘œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ์šฐ ์‰ผํ‘œ ๋’ค์— ์˜ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์Šน๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํฌ์ฐฉ๋˜์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๊ณ  ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•œ ๋‹ค์Œ ๋’ค๋กœ ๋Œ์•„๊ฐ€์„œ ์‰ผํ‘œ๋ฅผ ํŽธ์ง‘ํ•˜์—ฌ ํฌ์ฐฉํ•˜๋Š” ๋ฐ ์ ์–ด๋„ ํ•œ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณตํ•ด์•ผ ํ•˜๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ์ ์–ด๋„ ๋‚ด ๊ฒฝํ—˜์ƒ ํ›„ํ–‰ ์‰ผํ‘œ๋Š” ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ”ผํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๋Ÿฌ ์ค„ ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด์—์„œ ์‰ผํ‘œ๋ฅผ ๋’ค์— ๋ถ™์ด๋ฉด

 const sizes = [
     100,
     200,
     300,
 ];

๊ทธ๋ฆฌ๊ณ 

 const options = {
    width: 100,
    height: 200,
    depth: 300,
};

ํ›„ํ–‰ ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค„์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ํ•œ ์ค„๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ›„ํ–‰ ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ญ์ƒ ๋งˆ์ง€๋ง‰ ์‰ผํ‘œ๋ฅผ ์ธ์‹ํ•˜๊ณ  ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์–ด๋–ค ๊ฒฐ์ •์ด๋“  ๊ดœ์ฐฎ์œผ๋‹ˆ PR ๊ฐ€์ด๋“œ์— ๋”ฐ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ์˜ ์ผ๋ถ€๋ฅผ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•  ๋•Œ๊ฐ€ ๋˜๋ฉด ์ฝ”๋“œ๊ฐ€ ES5 ๋ชจ๋“ˆ๋กœ ์ „ํ™˜๋  ๋•Œ ๋ฌผ์–ด๋ณผ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค( var ๋ถ€๋ถ„์€ ์‹ค์ œ๋กœ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ์— ์—†์Šต๋‹ˆ๋‹ค.).

Suggestion

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

JS ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์š”์ฆ˜ ์‰ผํ‘œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๊นŒ?

๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋Š” IE๋ฅผ ์ œ์™ธํ•˜๊ณ  10๋…„ ์ด์ƒ ๋™์•ˆ ๋ฐฐ์—ด ๋ฐ ๊ฐœ์ฒด์—์„œ ํ•ด๋‹น ์‰ผํ‘œ๋กœ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ POV๋ฅผ ์ด์ƒํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ง€ ์•Š๊ณ  ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ์€ ์‹ค์ œ๋กœ ์‰ผํ‘œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ค‘๋‹จ์„ ์ œ๊ณตํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ๊ฒƒ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ์‚ฌ๋žŒ์˜ ์ด์ƒํ•œ ๊ฒƒ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๋ฏธํ™”์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ชจ๋“  ๋ผ์ธ์˜ ์ผ๊ด€์„ฑ์ด ๋งˆ์ง€๋ง‰ ๋ผ์ธ์ด ๋‹ค๋ฅธ ๊ฒƒ๋ณด๋‹ค ๊ฐœ์ธ์ ์œผ๋กœ ๋” ๋งŒ์กฑ์Šค๋Ÿฝ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๊ฒƒ๋“ค์€ ๊ฐœ์ธ์ ์ธ ์ทจํ–ฅ์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ๋ฌผ์„ ๋ฐ”๋ผ๋ณด๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

diff์— ๊ด€ํ•ด์„œ๋Š” ์˜จ๋ผ์ธ์—์„œ ์ด๋Ÿฌํ•œ ๋น„๊ต๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

์ค„์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ›„ํ–‰ ์‰ผํ‘œ ์ฐจ์ด ์—†์Œ

ํ›„ํ–‰ ์‰ผํ‘œ diff ํ–‰ ์ถ”๊ฐ€

๋ชจ๋“  16 ๋Œ“๊ธ€

var๊ฐ€ ๋” ๋นจ๋ž๋˜ ๋•Œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ๊ทธ ์‹œ๊ฐ„์€ ์˜ค๋ž˜ ์ „์— ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋ฌด์—‡์— ๊ทผ๊ฑฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? IIRC๊ฐ€ ์ด๊ฒƒ์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ…Œ์ŠคํŠธํ–ˆ์„ ๋•Œ const ์—๋Š” ์ฐจ์ด๊ฐ€ ์—†์—ˆ์ง€๋งŒ let ๋Š” ๋‹ค์†Œ ๋Š๋ ธ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์—…๋ฐ์ดํŠธ๋œ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์ค„ ๋ฐฐ์—ด ๋ฐ ๊ฐ์ฒด์— ํ›„ํ–‰ ์‰ผํ‘œ ํ—ˆ์šฉ

IE์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ํ™•์‹คํžˆ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค(์ตœ์†Œํ•œ IE 10 ๋ฐ 11์„ ์—ฌ์ „ํžˆ ์ง€์›ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?).

var๊ฐ€ ๋” ๋นจ๋ž๋˜ ๋•Œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ๊ทธ ์‹œ๊ฐ„์€ ์˜ค๋ž˜ ์ „์— ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋ฌด์—‡์— ๊ทผ๊ฑฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? IIRC๊ฐ€ ์ด๊ฒƒ์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ…Œ์ŠคํŠธํ–ˆ์„ ๋•Œ const ์—๋Š” ์ฐจ์ด๊ฐ€ ์—†์—ˆ์ง€๋งŒ let ๋Š” ๋‹ค์†Œ ๋Š๋ ธ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์—…๋ฐ์ดํŠธ๋œ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋„ค, ๋ช‡ ๊ฐ€์ง€ ์ˆ˜์น˜๊ฐ€ ๊ฒฐ์ •์— ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์ค„ ๋ฐฐ์—ด ๋ฐ ๊ฐ์ฒด์— ํ›„ํ–‰ ์‰ผํ‘œ ํ—ˆ์šฉ

์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๋Ÿฌ ์ค„ ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด์—์„œ ์‰ผํ‘œ๋ฅผ ๋’ค์— ๋ถ™์ด๋ฉด

const sizes = [
    100,
    200,
    300,
];

๋‚ด ๋‡Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ์Šต๋‹ˆ๋‹ค.

 const sizes = [
     100,
     200,
     300, undefined
 ];

JS ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์š”์ฆ˜ ์‰ผํ‘œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๊นŒ?

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

๋‚˜์—๊ฒŒ ํ›„ํ–‰ ์‰ผํ‘œ์˜ ๋ชฉ์ ์€ ํ•ญ๋ชฉ์„ ๋” ๋น ๋ฅด๊ฒŒ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐํ•˜๊ณ  ์ž˜๋ผ๋‚ด๊ธฐ/๋ถ™์—ฌ๋„ฃ๊ธฐ๋กœ ์žฌ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ์„ ์ž๋ฅด๋“  ๋ง๋“  ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ค„์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค. undefined ๋ฅผ ๋ณด๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ ํ•œ ์ค„์— ํ•ญ๋ชฉ์ด ํ•˜๋‚˜๋งŒ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉด [1, 2, 3, 4, 5] ์™€ ๊ฐ™์ด ๋ฐฐ์—ด์ด ํ•œ ์ค„์— ์žˆ๋Š” ๊ฒฝ์šฐ ํ›„ํ–‰ ์‰ผํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์–ด๋Š ์ชฝ์ด๋“  ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ const / let ๋กœ์˜ ์ „ํ™˜์ด ์ค‘์š”ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

... ํ•˜์ง€๋งŒ ์ง€๊ธˆ ๊ทธ ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ...

์šฐ๋ฆฌ๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ์„ ํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ? Rollup -plugin-buble ๊ณผ ๊ฐ™์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ํ•œ Rollup์€ ES6 ๊ฐ€์ ธ์˜ค๊ธฐ/๋‚ด๋ณด๋‚ด๊ธฐ ๊ตฌ๋ฌธ์„ ๋Œ€์ฒดํ•˜๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ ๊ทธ๋Œ€๋กœ let / const ๋Š” ์–ด์จŒ๋“  IE11์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

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

๋”ฐ๋ผ์„œ ์—ฌ๊ธฐ์— ๋ถ„๋ช…ํ•œ ์‚ฌ์‹ค์„ ์„ค๋ช…ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. @mrdoob ์— ์˜ํ•ด ์ถ”๊ฐ€๋œ ์—ฌ๋Ÿฌ ์ค„์— ํ•ญ๋ชฉ์ด ๋‚˜์—ด๋˜๊ณ  ๋‚˜์ค‘์— ๊ฑฐ๊ธฐ์— ํ•œ ์ค„์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‚ด๊ฐ€ ์ž‘์„ฑํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ค„์— ๋‚ด ์ด๋ฆ„์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์‚ฌ๋žŒ๋“ค์ด ์ €์—๊ฒŒ ๋งํ•œ ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์€ ์ด์œ ๋กœ ํ›„ํ–‰ ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ ์„ ๋ณด๊ณ  ์˜ฌํ•ด๋ถ€ํ„ฐ ์‚ฌ๋ฌด์‹ค์—์„œ๋„ ์ด๊ฒƒ์„ ์‹œํ–‰ํ•˜๊ณ  ์žˆ์–ด ์ด์ œ ์ต์ˆ™ํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

JS ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์š”์ฆ˜ ์‰ผํ‘œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๊นŒ?

๋„ค.

let ๋Œ€ var ์˜ ์‚ฌ์šฉ์— ๊ด€ํ•˜์—ฌ:

let ์™€ var ๋Š” ์„ฑ๋Šฅ์— ๊ด€ํ•œ ํ•œ ์š”์ฆ˜์—๋Š” ๋” ์ด์ƒ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. V8๊ณผ Spidermonkey(Firefox)๋Š” ์š”์ฆ˜ ์ •๋ง ์ž˜ ์ž‘๋™ํ•˜๋Š” ํ›Œ๋ฅญํ•œ ์ตœ์ ํ™”๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค(์‹ค์ œ ์Šค๋‹ˆํŽซ์„ ์‹คํ–‰ํ•˜์—ฌ ์ฐจ์ด๊ฐ€ ๊ฑฐ์˜ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค): https://stackoverflow.com/questions/37792934/why-is-let-slower-than-var- in-a-for-loop-in-nodejs

ํ•ด๋‹น SO ์งˆ๋ฌธ์— ๋Œ€ํ•œ ํ—ˆ์šฉ๋œ ๋‹ต๋ณ€์€ ๊ธฐ๋Šฅ์  ๊ด€์ ์—์„œ var ์™€ let ์˜ ์ฐจ์ด์ ๋„ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— _๋งค์šฐ_ ๋‹ค๋ฅธ ์˜๋ฏธ์™€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜.

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

๊ทธ๋ƒฅ ๋‚ด 2 ์„ผํŠธ.

์ฐธ๊ณ ๋กœ:

ํ›„ํ–‰ ์‰ผํ‘œ๋Š” ๋‚ด๊ฐ€ ๋ณธ ์ตœ๊ณ ์˜ js ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ diff๋ฅผ ํ›จ์”ฌ ๋” ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

JS ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์š”์ฆ˜ ์‰ผํ‘œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๊นŒ?

๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋Š” IE๋ฅผ ์ œ์™ธํ•˜๊ณ  10๋…„ ์ด์ƒ ๋™์•ˆ ๋ฐฐ์—ด ๋ฐ ๊ฐœ์ฒด์—์„œ ํ•ด๋‹น ์‰ผํ‘œ๋กœ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ POV๋ฅผ ์ด์ƒํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ง€ ์•Š๊ณ  ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ์€ ์‹ค์ œ๋กœ ์‰ผํ‘œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ค‘๋‹จ์„ ์ œ๊ณตํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ๊ฒƒ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ์‚ฌ๋žŒ์˜ ์ด์ƒํ•œ ๊ฒƒ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๋ฏธํ™”์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ชจ๋“  ๋ผ์ธ์˜ ์ผ๊ด€์„ฑ์ด ๋งˆ์ง€๋ง‰ ๋ผ์ธ์ด ๋‹ค๋ฅธ ๊ฒƒ๋ณด๋‹ค ๊ฐœ์ธ์ ์œผ๋กœ ๋” ๋งŒ์กฑ์Šค๋Ÿฝ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๊ฒƒ๋“ค์€ ๊ฐœ์ธ์ ์ธ ์ทจํ–ฅ์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ๋ฌผ์„ ๋ฐ”๋ผ๋ณด๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

diff์— ๊ด€ํ•ด์„œ๋Š” ์˜จ๋ผ์ธ์—์„œ ์ด๋Ÿฌํ•œ ๋น„๊ต๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

์ค„์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ›„ํ–‰ ์‰ผํ‘œ ์ฐจ์ด ์—†์Œ

ํ›„ํ–‰ ์‰ผํ‘œ diff ํ–‰ ์ถ”๊ฐ€

๋จผ์ € let ๋ฐ const ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ํ•œ ๋‹จ๊ณ„ ์”ฉ.

screen shot 2018-07-30 at 5 03 00 pm

๋‚˜๋Š” ๊ทธ ํƒ€์ด๋ฐ์ด ์ „ํ™”ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๊ฐ€๊น๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š”๋‹ค

screen shot 2018-07-31 at 9 13 50

Chrome 70์—์„œ๋Š” ์›๊ฒฉ์œผ๋กœ ๊ฐ€๊น์ง€ ์•Š์ง€๋งŒ

screen shot 2018-07-31 at 9 15 36

์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์—์žˆ๋Š” ๋™์•ˆ

screen shot 2018-07-31 at 9 19 20

screen shot 2018-07-31 at 9 20 18

ํ›„ํ–‰ ์‰ผํ‘œ์— ๋Œ€ํ•œ POV๋ฅผ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ˜œ ํ›„ํ–‰ ์‰ผํ‘œ๋Š” ์„ธ๋ฏธ์ฝœ๋ก ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์™„์ „ํžˆ ํ•ฉ๋ฒ•์  ์ธ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค

 {
      doThis();
      doThat();
      doOther()
 }

๋งˆ์ง€๋ง‰ ์ค„์— ์„ธ๋ฏธ์ฝœ๋ก ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ POV๋Š” ์‰ผํ‘œ๋ฅผ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ์‚ฌ๋žŒ/๋žจํ”„ ํ™˜์ƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

2๋ช…์„ ๋ณด๋“  ์ด›๋Œ€๋ฅผ ๋ณด๋“  ๋‘˜ ๋‹ค ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒฝ์šฐ ๋‘ POV๊ฐ€ ๋ชจ๋‘ ๋งž๊ธฐ ๋•Œ๋ฌธ์— ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด("๋์— ์‰ผํ‘œ๊ฐ€ , ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค" vs "์‰ผํ‘œ๊ฐ€ ์—†์œผ๋ฉด ์ผ๊ด€์„ฑ์ด ์—†์–ด ๋ณด์ž…๋‹ˆ๋‹ค") ํ•˜๋‚˜๋Š” ๊ฐ๊ด€์ ์ธ ์ด์ ์ด ์žˆ๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค...?

์ฝ”๋“œ ์–ด๋”˜๊ฐ€์— const ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋” ์ด์ƒ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค...

screen shot 2018-07-30 at 5 58 46 pm

@mrdoob ์ถœ๋ ฅ ํ˜•์‹์€ ES ๋˜๋Š” ES5 ๋Œ€์‹  ES6 ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

#6419์— ์ฐฌ์„ฑํ•˜์—ฌ ๋งˆ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰