2021-01-05(Tue)

ํ•ญ๋ชฉ

๋‚ด์šฉ

ํ•™์Šต ๋‚ ์งœ

2021-01-05(ํ™”)

ํ•™์Šต ์‹œ๊ฐ„

12:00~24:00

ํ•™์Šต ๋ฒ”์œ„ ๋ฐ ์ฃผ์ œ

๋ฃจ๋น„์˜จ๋ ˆ์ผ์ฆˆ ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ - Sprockets, Asset pipeline

ํ•™์Šต ๋ชฉํ‘œ

ํผํŽ™ํŠธ ๋ฃจ๋น„์˜จ๋ ˆ์ผ์ฆˆ์˜ ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ํ›‘๊ณ  ํŠธ๋ Œ์  ๋”์Šค ๊ตฌํ˜„์‹œ ํ•„์š”ํ•œ ๊ฐœ๋…์„ ์ˆ™์ง€ํ•ด๋‘”๋‹ค.

๋™๋ฃŒ ํ•™์Šต ๋ฐฉ๋ฒ•

eunhkim, jujeong, sanam, yohlee ๋‹˜๊ณผ ๋””์Šค์ฝ”๋“œ๋กœ ํ•™์Šต์‹œ๊ฐ„ ๊ณต์œ  + ํ•™์Šต๋ฏธํŒ…์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

์ƒ์„ธ ํ•™์Šต ๋‚ด์šฉ

๋ ˆ์ผ์ฆˆ ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์— ๋Œ€ํ•ด์„œ ์ฑ…์„ ํ›‘์—ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ Sprockets๋งŒ ์ฑ…์— ์ ํ˜€์žˆ๋Š”๋ฐ Asset ํŒŒ์ผ ๊ตฌ์กฐ๊ฐ€ Rails 6์™€ ๋‹ฌ๋ผ์„œ ๊นŠ๊ฒŒ ํŒŒ๋ณด์•˜๋”๋‹ˆ webpacker์™€ ๊ธฐ๋Šฅ์ด ๋‚˜๋ˆ„์–ด์ง„ ์ƒํ™ฉ์ž„์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด ๋ถ€๋ถ„๊นŒ์ง€ ํŒ ๋˜ ํŒ€์›์ด ์—†์—ˆ๊ธฐ์— ์ •๋ฆฌํ•ด์„œ ๊ณต์œ ํ•˜์˜€๋‹ค. Ajax, ํ„ฐ๋ณดํŽ˜์ด์ง€ ๋“ฑ์€ ์‹ค์Šตํ•ด๋ณด์ง€๋Š” ์•Š์•˜์ง€๋งŒ ๊ฐœ๋…์„ ํ™•์ธํ•ด๋’€์œผ๋‹ˆ ์ถ”ํ›„ Rails ๊ฐœ๋ฐœ์‹œ ์ ์šฉ์‹œํ‚ค๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

backbone js๋ฅผ ํ•™์Šตํ•˜๊ธฐ ์ „์— ์šฐ์„  javascript์— ๋Œ€ํ•œ ํ•™์Šต์ด ์„ ํ–‰๋˜์–ด์•ผํ•จ์„ ํ™•์ธํ–ˆ๋‹ค. ๋น ๋ฅด๊ฒŒ TCP School์„ ํ›‘์—ˆ๋‹ค.

์•„๋ž˜๋Š” ํ•™์Šตํ•œ ๋‚ด์šฉ์˜ ๋ฉ”๋ชจ์ด๋‹ค.

Rails ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ

Sprockets vs Webpacker

์šฐ์„  ์—์…‹ ๊ฐœ๋…์„ ์งš์ž. ์• ์…‹(Asset)์ด๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ, ์Šคํƒ€์ผ์‹œํŠธ, ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค๋ฃจ๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์˜ ์ด์นญ์ด๋‹ค.

Rails4 ์—์„œ๋Š” ์—์…‹์„ ์ฝ์–ด๋“ค์ด๊ธฐ ์œ„ํ•ด Sprockets ๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Rails6 ์—์„œ๋Š” Sprockets ๋ง๊ณ ๋„ Webpacker๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ Webpacker๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์ŠคํŒŒ์ผ์„ ๋‹ค๋ฃจ๋Š”๋ฐ ์“ฐ๊ณ , Sprockets๋Š” ๋‚˜๋จธ์ง€ ์ „๋ถ€๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ์“ฐ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

"Rails way": Webpacker to compile JavaScript, Sprockets for CSS, images, and fonts

์–ด์ฐจํ”ผ ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์„œ๋กœ ์˜์กด์„ฑ์„ 1๋„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ๋”ฐ๋ผ์„œ Sprockets๋งŒ ์“ฐ๊ฑฐ๋‚˜ Webpacker๋งŒ ์“ฐ๋Š” ๊ฒƒ๋„ ์œ ํšจํ•˜๋‹ค. ์ฆ‰, ๋‘˜ ๋‹ค ์„ ํƒ์ง€๋กœ ์กด์žฌํ•œ๋‹ค๋Š” ์†Œ๋ฆฌ๊ณ  ์ƒํ™ฉ์— ๋”ฐ๋ผ ์„ ํƒํ•ด์•ผํ•  ๋ฌธ์ œ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

Sprockets์„ ์“ธ ์ด์œ (์ƒํ™ฉ)

  • ๋‚ด Rails ์•ฑ์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŽ์ด ์•ˆ ์“ด๋‹ค.

  • ์ „์—ญ ์Šคํฌ๋ฆฝํŠธ์™€ jQuery๋ฅผ ์„ ํ˜ธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์“ธ ํ•„์š”๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์ด๋‹ค.

  • legacy Rails ์•ฑ์„ Webpacker๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ๋น„์šฉ์ด ๋„˜ ๋น„์‹ธ๋‹ค.

  • ๋กœ์ปฌ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๊ณ ๊ธ‰ ํˆด๋ง(tooling)์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

  • ๊ฑ ๋Œ์•„๊ฐ€๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ๋ฅผ ์›ํ•œ๋‹ค. ๋ง‰ ์ข‹์€ ๋Œ€์•ˆ์„ ์ฐพ์„ ์‹œ๊ฐ„์ด ์—†๋‹ค.

  • ๋‚ด Rails ์•ฑ์ด ํŠน์ • gem์„ ์‚ฌ์šฉํ•˜๋ฉฐ, NPM์„ ๋Œ€์‹  ํ•  ์ˆ˜ ์—†๋‹ค.

Sprockets๋ฅผ ์“ฐ์ง€ ์•Š์„ ์ด์œ (์ƒํ™ฉ)

  • Sprockets๋Š” ๋กœ์ปฌ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ ๋Š๋ฆฌ๋‹ค.

  • asset์„ ์ข€ ๋” ์„ฌ์„ธํ•˜๊ฒŒ ์ œ์–ดํ•ด์•ผํ•œ๋‹ค.

  • ๋‚ด ์•ฑ์—๋Š” JavaScript๊ฐ€ ๋งŽ๊ณ  ๋Œ€๋Ÿ‰์˜ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ ๋ถ„ํ•  ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค.

  • ์žฅ๊ธฐ์ ์œผ๋กœ ์ง€์›์„ ์œ ์ง€ํ•  ์„œ๋น„์Šค๋‹ค.

Webpacker๋ฅผ ์“ธ ์ด์œ (์ƒํ™ฉ)

  • ์˜์กด์„ฑ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์“ฐ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ „์—ญ ์Šค์ฝ”ํ”„๊ฐ€ ์˜ค์—ผ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ช…์‹œ์ ์ธ ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๊ฐ€ ์š”๊ตฌ๋œ๋‹ค.

  • ES6+, Babel, PostCS์˜ ์ตœ์ฒจ๋‹จ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๊ณ  ์‹ถ๋‹ค.

  • ๋™์  ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ์›น ํŒฉ์˜ splitChunks ์ตœ์ ํ™”์™€ ๊ฐ™์€ ์ง€๋Šฅํ˜• ์ฝ”๋“œ ๋ถ„ํ•  ๊ธฐ๋Šฅ์„ ์›ํ•œ๋‹ค.

  • ๋นŒ๋“œ ์‹œ์Šคํ…œ์—์„œ ์†Œ์Šค ๋งต์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์›ํ•œ๋‹ค.

  • hot module replacement ๊ฐ™์€ ๊ณ ๊ธ‰ ํˆด๋ง(tooling)์ด ํ•„์š”ํ•˜๋‹ค.

  • ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์•ฑ์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค. ์•„, ๋ฌผ๋ก  Webpack์„ ์“ฐ๋ ค๊ณ  ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์•ฑ์„ ๋งŒ๋“ค ํ•„์š”๋Š” ์—†๋‹ค. Webpack์€ ๋ฉ€ํ‹ฐ ํŽ˜์ด์ง€ ์•ฑ์—์„œ ๋” ์ž˜ ์ž‘๋™ํ•œ๋‹ค.

Webpacker๋ฅผ ์“ฐ์ง€ ์•Š์„ ์ด์œ (์ƒํ™ฉ)

  • ๋‚ด Rails ์•ฑ์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŽ์ด ์•ˆ์“ด๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—์ฝ”์‹œ์Šคํ…œ์— ๋Œ€ํ•ด์„œ ์ง€์‹์ด ๋ถ€์กฑํ•˜๋‹ค.

  • webpack๊ณผ Webpacker ํ•™์Šต์— ์‹œ๊ฐ„์„ ์“ธ ์ˆ˜๊ฐ€ ์—†๋‹ค.

  • ๋„˜ ๋ณต์žกํ•ด๋ณด์ธ๋‹ค.

Sprockets๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, ์Šคํƒ€์ผ์‹œํŠธ ์ž„ํฌํŠธ

Sprockets๋Š” ์—์…‹์„ ๋งค๋‹ˆํŽ˜์ŠคํŠธ, ์ฆ‰ ๋ฏธ๋ฆฌ ์ค€๋น„๋œ ๋ฆฌ์†Œ์Šค๋กœ ์ฝ์–ด๋“ค์ธ๋‹ค. app/assets ํด๋”๋ฅผ ํ™•์ธํ•˜์ž.

๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ •์˜๋Š” ๊ฐ๊ฐ ์ฃผ์„(//, /* ~ */)์˜ ๋‚ด๋ถ€์— =<์ง€์‹œ์ž> <๋งค๊ฐœ ๋ณ€์ˆ˜>์˜ ํ˜„์‹์œผ๋กœ ํ‘œ๊ธฐํ•œ๋‹ค.

์ฐธ๊ณ ๋กœ Rails๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๊ฐœ๋ฐœ ์–ธ์–ด๋กœ ์ปคํ”ผ์Šคํฌ๋ฆฝํŠธ์™€ SCSS๋ฅผ ํ‘œ์ค€์œผ๋กœ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†๋‹ค.

์—์…‹ ํŒŒ์ดํ”„๋ผ์ธ(Asset Pipeline)

์—์…‹ ํŒŒ์ดํ”„๋ผ์ธ์€ Sprockets ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ œ๊ณต๋˜๋Š” ๊ตฌ์กฐ๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ์Šคํƒ€์ผ์‹œํŠธ, ์ด๋ฏธ์ง€ ๋“ฑ์˜ ์ ‘๊ทผ์„ ํ•œ๊บผ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์‘๋‹ตํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์ฑ…์—์„œ ๋ฌ˜์‚ฌ๋œ Rails4 ๊ธฐ์ค€ ์—์…‹ ํŒŒ์ดํ”„๋ผ์ธ์€ ์•„๋ž˜ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

  1. ์›๋ž˜ ์†Œ์Šค ์ฝ”๋“œ ex) articles.js.coffee, photos.css.scss

  2. ์ปดํŒŒ์ผ ex) article.js, photos.css

  3. ๊ฒฐํ•ฉ ex) ๊ฐ๊ฐ application.js, application.css ์— ๊ฒฐํ•ฉ๋จ.

  4. ์••์ถ•

    ์›๋ž˜ ์ฝ”๋“œ์—์„œ ์ฃผ์„์ด๋‚˜ ๊ฐœํ–‰, ๊ณต๋ฐฑ ๋“ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ex) ๊ฐ๊ฐ application.js, application.css ์— ์••์ถ•๋จ.

  5. ๋‹ค์ด์ œ์ŠคํŠธ ์ถ”๊ฐ€

    ์ฝ”๋“œ์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์‹œ(๋‹ค์ด์ œ์ŠคํŠธ)๋ฅผ ์—ฐ์‚ฐํ•ด์„œ ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰์— ๋ถ™์ธ๋‹ค. ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์˜๋„ํ•˜์ง€ ์•Š์€ ์บ์‹œ ์‚ฌ์šฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ํŒŒ์ผ ์ด๋ฆ„์„ ๊ฐ•์ œ์ ์œผ๋กœ ํ•จ๊ป˜ ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด์ „์˜ ์—์…‹ ์ฝ”๋“œ๋ฅผ ์žฌํ™œ์šฉํ•˜๋Š” ์ผ ์—†์ด ์—์…‹ ์ˆ˜์ •์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜๋œ๋‹ค. ex) ๊ฐ๊ฐ application-xxxx.js, application-xxxx.css๋กœ ๋‹ค์ด์ œ์ŠคํŠธ ์ถ”๊ฐ€๋จ.

์ด ๋•Œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ 2๋ฒˆ(์ปดํŒŒ์ผ) ๊ณผ์ •์„ ๊ฑฐ์นœ ํ›„์— ๋ฐ”๋กœ ์ถœ๋ ฅํ•ด๋ฒ„๋ฆฐ๋‹ค.

๋ฐ˜๋ฉด ๋ฐฐํฌ ํ™˜๊ฒฝ์€ 2๋ฒˆ ๊ณผ์ •์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋ฐ”๋กœ 3(๊ฒฐํ•ฉ), 4(์••์ถ•), 5(๋‹ค์ด์ œ์ŠคํŠธ ์ถ”๊ฐ€) ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

Ajax ๊ฐœ๋ฐœ

Ajax(Asynchronous JAvascript + Xml)์€ ๋ธŒ๋ผ์šฐ์ € ์œ„์—์„œ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•œ ํ‘œํ˜„์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ๋กœ ๊ตฌํ˜„๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ RIA(Rich Internet Applications)๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค. RIA ๊ธฐ์ˆ  ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์—” ํ”Œ๋ž˜์‹œ๋‚˜ ์‹ค๋ฒ„๋ผ์ดํŠธ ๊ฐ™์€ ๊ธฐ์ˆ ๊ณผ Ajax ๊ธฐ์ˆ ์ด ์žˆ๋‹ค. ํ”Œ๋ž˜์‹œ์™€ ์‹ค๋ฒ„๋ผ์ดํŠธ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•ด์•ผํ•˜์ง€๋งŒ Ajax๋Š” ์›น ํ‘œ์ค€ ๊ธฐ์ˆ ๋งŒ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅด๋‹ค. ์ฐธ๊ณ ๋กœ ํ”Œ๋ž˜์‹œ๋Š” ์‚ฌ์žฅ๋˜์—ˆ๋‹ค.

Ajax๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋™๊ธฐ ํ†ต์‹ ์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๋„ ์—†๋‹ค.

Javascript

javascript๋ฅผ ํ•™์Šตํ•˜๋ฉฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฉ”๋ชจํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŠน์ง•

ํ˜„์žฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ตœ์‹  ํ‘œ์ค€์€ 2015๋…„์— ๋ฐœํ‘œ๋œ ECMAScript 6์ด๋‹ค.

ํƒ€์ž…

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ํƒ€์ž…์€ ์›์‹œ ํƒ€์ž…๊ณผ ๊ฐ์ฒด ํƒ€์ž…์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์›์‹œ ํƒ€์ž…(primitive type)

  1. ์ˆซ์ž(number)

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ชจ๋“  ์ˆ˜๋ฅผ ์ •์ˆ˜, ์‹ค์ˆ˜ ๊ตฌ๋ถ„ ์—†์ด ์‹ค์ˆ˜ ํ•˜๋‚˜๋กœ๋งŒ ํ‘œ๊ธฐํ•œ๋‹ค.

  2. ๋ฌธ์ž์—ด(string)

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

  3. ๋ถˆ๋ฆฌ์–ธ(boolean)

  4. ์‹ฌ๋ณผ(symbol): ECMAScript 6๋ถ€ํ„ฐ ์ œ๊ณต๋จ. ์‹ฌ๋ณผ์€ ์œ ์ผํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ํƒ€์ž…์œผ๋กœ, ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์œ„ํ•œ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ต์Šคํ”Œ๋กœ๋Ÿฌ์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  5. undefined null๊ณผ ๊ตฌ๋ณ„ํ•˜์ž. null์€ object ํƒ€์ž…์ด๋ฉฐ, ์•„์ง '๊ฐ’'์ด ์ •ํ•ด์ง€์ง€ ์•Š์€ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋˜ํ•œ, undefined๋ž€ null๊ณผ๋Š” ๋‹ฌ๋ฆฌ 'ํƒ€์ž…'์ด ์ •ํ•ด์ง€์ง€ ์•Š์€ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ undefined๋Š” ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋‚˜ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์— ์ ‘๊ทผํ•  ๋•Œ ๋ฐ˜ํ™˜๋œ๋‹ค.

    null๊ณผ undefiend๋Š” ๋™๋“ฑ ์—ฐ์‚ฐ์ž(==)์™€ ์ผ์น˜ ์—ฐ์‚ฐ์ž(===)๋กœ ๋น„๊ตํ•  ๋•Œ ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹ค๋ฅด๋ฏ€๋กœ ์ฃผ์˜ํ•˜์ž.

    null == undefined; //true, ํƒ€์ž…์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๊ฐ™์€ ์˜๋ฏธ์ด๋‹ค.
    null === undefined; //false, ํƒ€์ž…์ด ๋‹ค๋ฅด๋ฏ€๋กœ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฐธ์กฐ๋ฐ์ดํ„ฐ ํƒ€์ž…

์ฐธ์กฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…์—๋Š” ๊ฐ์ฒด(object)๊ฐ€ ์žˆ๋‹ค.

ํ˜• ๋ณ€ํ™˜

๋ฌต์‹œ์  ํƒ€์ž… ๋ณ€ํ™˜

์™ ๋งŒํ•˜๋ฉด ํŠน์ • ํƒ€์ž…์˜ ๊ฐ’์„ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ณณ์— ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์ด ์˜ค๋ฉด, ์ž๋™์œผ๋กœ ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

1 - "๋ฌธ์ž์—ด"; ์ฒ˜๋Ÿผ ์•„์˜ˆ ํ˜•๋ณ€ํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ NaN ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

NaN
Not a Number์˜ ์ถ•์•ฝํ˜•์œผ๋กœ, ์ •์˜๋˜์ง€ ์•Š์€ ๊ฐ’์ด๋‚˜ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์ด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ NaN์€ Number ํƒ€์ž…์˜ ๊ฐ’์œผ๋กœ 0์„ 0์œผ๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜, ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†๋Š” ํ”ผ์—ฐ์‚ฐ์ž๋กœ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฐ˜ํ™˜๋˜๋Š” ์ฝ๊ธฐ ์ „์šฉ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋ช…์‹œ์  ํƒ€์ž… ๋ณ€ํ™˜

๋ช…์‹œ์  ํƒ€์ž… ๋ณ€ํ™˜์„ ์œ„ํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ „์—ญ ํ•จ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. Number()

  2. String()

  3. Boolean()

  4. Object()

  5. parseInt()

  6. parseFloat()

๋ณ€์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” var ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค.

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

date = 25; //date๋ผ๋Š” ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋ฅผ ๋ฌต์‹œ์ ์œผ๋กœ ์„ ์–ธ

์Œ..? ๊ทธ๋ฆฌ๊ณ  ์ปดํŒŒ์ผ ๋‹จ๊ณ„๊ฐ€ ์—†๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์ด๋‹ค๋ณด๋‹ˆ ๋ณ€์ˆ˜ ์žฌ์„ ์–ธ์‹œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚  ์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๊ฑ ๋ณ€์ˆ˜ ์žฌ์„ ์–ธ ๋ฌธ๊ตฌ๊ฐ€ ๋ฌด์‹œ๋œ๋‹ค.

var num = 10;        // ๋ณ€์ˆ˜์˜ ์„ ์–ธ๊ณผ ํ•จ๊ป˜ ์ดˆ๊ธฐํ™”
num = [10, 20, 30];  // ๋ฐฐ์—ด ๋Œ€์ž…
var num;             // ์ด ์žฌ์„ ์–ธ๋ฌธ์€ ๋ฌด์‹œ๋จ.

์—ฐ์‚ฐ์ž

๋™๋“ฑ์—ฐ์‚ฐ์ž์™€ ์ผ์น˜ ์—ฐ์‚ฐ์ž๋ฅผ ์ฒดํฌํ•˜์ž.

๋น„๊ต ์—ฐ์‚ฐ์ž

์„ค๋ช…

===

์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์™€ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์ด ๊ฐ™๊ณ , ๊ฐ™์€ ํƒ€์ž…์ด๋ฉด ์ฐธ์„ ๋ฐ˜ํ™˜.

==

์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์™€ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ์ฐธ์„ ๋ฐ˜ํ™˜.

!=

์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์™€ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์ด ๊ฐ™์ง€ ์•Š์œผ๋ฉด ์ฐธ์„ ๋ฐ˜ํ™˜.

!==

์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์™€ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์ด ๊ฐ™์ง€ ์•Š๊ฑฐ๋‚˜, ํƒ€์ž…์ด ๋‹ค๋ฅด๋ฉด ์ฐธ์„ ๋ฐ˜ํ™˜.

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

๋น„ํŠธ ์—ฐ์‚ฐ์ž, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž, delete, typeof ์—ฐ์‚ฐ์ž๋„ C, C++์ด๋ž‘ ๋™์ผํ•˜๋‹ค.

instanced ์—ฐ์‚ฐ์ž๋Š” ํ”ผ์—ฐ์‚ฐ์ž์ธ ๊ฐ์ฒด๊ฐ€ ํŠน์ • ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํ™•์ธํ•ด์ค€๋‹ค.

var str = new String("์ด๊ฒƒ์€ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.");
โ€‹
str instanceof Object;  // true
str instanceof String;  // true
str instanceof Array;   // false
str instanceof Number;  // false
str instanceof Boolean; // false

void ์—ฐ์‚ฐ์ž๋Š” ํ”ผ์—ฐ์‚ฐ์ž๋กœ ์–ด๋–ค ํƒ€์ž…์ด ์˜ค๋˜์ง€ ์ƒ๊ด€์—†์ด ์–ธ์ œ๋‚˜ undefined ๊ฐ’๋งŒ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋ฐ˜๋ณต๋ฌธ

for / in ๋ฌธ

for / in ๋ฌธ์€ ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋ชจ๋“  ์—ด๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ(enumerable properties)๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๋งํ•˜์ง€๋งŒ, for / in ๋ฌธ์€ ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์˜ค์ง ์—ด๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ๋งŒ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์—ด๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ๋ž€ ๋‚ด๋ถ€์ ์œผ๋กœ enumerable ํ”Œ๋ž˜๊ทธ๊ฐ€ true๋กœ ์„ค์ •๋œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋กœํผํ‹ฐ๋“ค์€ for / in ๋ฌธ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

for / of ๋ฌธ

for / of ๋ฌธ์€ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด(iterable objects)๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ฐ˜๋ณต๋ฌธ์ด๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์—๋Š” Array, Map, Set, arguments ๊ฐ์ฒด ๋“ฑ์ด ์žˆ๋‹ค.

for / of ๋ฌธ์€ ์ต์Šคํ”Œ๋กœ๋Ÿฌ์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ฃจํ”„ ์ œ์–ด - label ๋ฌธ

์ผ๋ฐ˜์ ์œผ๋กœ ํ‘œํ˜„์‹์˜ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ๋ฃจํ”„๋กœ ์ง„์ž…ํ•˜๋ฉด, ๋‹ค์Œ ํ‘œํ˜„์‹์„ ๊ฒ€์‚ฌํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋ฃจํ”„ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ์‹คํ–‰๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค. ํ•˜์ง€๋งŒ continue ๋ฌธ๊ณผ break ๋ฌธ์€ ์ด๋Ÿฌํ•œ ์ผ๋ฐ˜์ ์ธ ๋ฃจํ”„์˜ ํ๋ฆ„์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

label ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด continue ๋ฌธ๊ณผ break ๋ฌธ์˜ ๋™์ž‘์ด ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ํŠน์ • ์˜์—ญ์œผ๋กœ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

label:
์‹๋ณ„ํ•˜๊ณ ์ž ํ•˜๋Š” ํŠน์ • ์˜์—ญ

์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์˜ˆ์‹œ1) ํ™€์ˆ˜์— ๋Œ€ํ•ด์„œ๋งŒ ๊ตฌ๊ตฌ๋‹จ ์ ์šฉ.

gugudan:
for (var i = 2; i <= 9; i++) {
    dan:
    for (var j = 1; j <= 9; j++) {
        if ((i*j) % 2 == 0)
            continue dan;
        document.write(i + " * " + j + " = " + (i*j) + "<br>");
    }
}

์˜ˆ์‹œ2) 3๋‹จ๊นŒ์ง€๋งŒ ๊ตฌ๊ตฌ๋‹จ ์ ์šฉ

gugudan:
for (var i = 2; i <= 9; i++) {
    dan:
    for (var j = 1; j <= 9; j++) {
        if (i > 3)
            break gugudan;
        document.write(i + " * " + j + " = " + (i*j) + "<br>");
    }
}

๋ฐฐ์—ด(array)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐฐ์—ด(array): ์ด๋ฆ„๊ณผ ์ธ๋ฑ์Šค๋กœ ์ฐธ์กฐ๋˜๋Š” ์ •๋ ฌ๋œ ๊ฐ’์˜ ์ง‘ํ•ฉ

๋ฐฐ์—ด์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ ๊ฐ’์„ ๋ฐฐ์—ด ์š”์†Œ(element)๋ผ๊ณ  ํ•˜๋ฉฐ, ๋ฐฐ์—ด์—์„œ์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ˆซ์ž๋ฅผ ์ธ๋ฑ์Šค(index)๋ผ๊ณ  ํ—Œ๋”,

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐฐ์—ด์˜ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋ฐฐ์—ด ์š”์†Œ์˜ ํƒ€์ž…์ด ๊ณ ์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ฐ™์€ ๋ฐฐ์—ด์— ์žˆ๋Š” ๋ฐฐ์—ด ์š”์†Œ๋ผ๋ฆฌ์˜ ํƒ€์ž…์ด ์„œ๋กœ ๋‹ค๋ฅผ ์ˆ˜๋„ ์žˆ๋‹ค.

  2. ๋ฐฐ์—ด ์š”์†Œ์˜ ์ธ๋ฑ์Šค๊ฐ€ ์—ฐ์†์ ์ด์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ, ๋”ฐ๋ผ์„œ ํŠน์ • ๋ฐฐ์—ด ์š”์†Œ๊ฐ€ ๋น„์–ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

  3. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐฐ์—ด์€ Array ๊ฐ์ฒด๋กœ ๋‹ค๋ค„์ง„๋‹ค.

๋ฐฐ์—ด ์ƒ์„ฑ

์ƒ์„ฑ ๋ฐฉ์‹์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ชจ๋‘ ๊ฐ™์€ ๊ฒฐ๊ณผ์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

  1. var arr = [๋ฐฐ์—ด์š”์†Œ1, ๋ฐฐ์—ด์š”์†Œ2,...]; // ๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  2. var arr = Array(๋ฐฐ์—ด์š”์†Œ1, ๋ฐฐ์—ด์š”์†Œ2,...); // Array ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  3. var arr = new Array(๋ฐฐ์—ด์š”์†Œ1, ๋ฐฐ์—ด์š”์†Œ2,...); // new ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ Array ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ๋ฒ•

๋ฐฐ์—ด ์š”์†Œ์˜ ์ถ”๊ฐ€

๋ฐฐ์—ด์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

1. arr.push(์ถ”๊ฐ€ํ•  ์š”์†Œ);         // push() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
2. arr[arr.length] = ์ถ”๊ฐ€ํ•  ์š”์†Œ; // length ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
3. arr[ํŠน์ •์ธ๋ฑ์Šค] = ์ถ”๊ฐ€ํ•  ์š”์†Œ; // ํŠน์ • ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

push() ๋ฉ”์†Œ๋“œ์™€ length ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์€ ๋ชจ๋‘ ๋ฐฐ์—ด์˜ ์ œ์ผ ๋์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

์ธ๋ฑ์Šค์— ๋Œ€์‘ํ•˜๋Š” ๋ฐฐ์—ด ์š”์†Œ๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์€ ๋ฐฐ์—ด์˜ ํ™€(hole)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ฐฐ์—ด์˜ ํ™€์„ undefined ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์š”์†Œ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•œ๋‹ค.

ํฌ์†Œ ๋ฐฐ์—ด

ํฌ์†Œ ๋ฐฐ์—ด์ด๋ž€ ๋ฐฐ์—ด์— ์†ํ•œ ์š”์†Œ์˜ ์œ„์น˜๊ฐ€ ์—ฐ์†์ ์ด์ง€ ์•Š์€ ๋ฐฐ์—ด์„ ์˜๋ฏธํ•œ๋‹ค.

์—ฐ๊ด€ ๋ฐฐ์—ด

์ˆซ์ž๋กœ ๋œ ์ธ๋ฑ์Šค ๋Œ€์‹ ์— ๋ฌธ์ž์—ด๋กœ ๋œ ํ‚ค(key)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฐ์—ด์„ ์—ฐ๊ด€ ๋ฐฐ์—ด(associative array)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์—ฐ๊ด€ ๋ฐฐ์—ด์„ ๋ณ„๋„๋กœ ์ œ๊ณตํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ์ธ๋ฑ์Šค๋กœ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ด€ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด(object)๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๋ฐฐ์—ด์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด๋ถ€์ ์œผ๋กœ Array ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ๊ธฐ๋ณธ ๊ฐ์ฒด๋กœ ์žฌ์„ ์–ธ๋œ๋‹ค. ์ฆ‰, ์—ฐ๊ด€ ๋ฐฐ์—ด์€ Array ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ length ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์ด 0 ์ด๊ณ  ์ˆซ์ž๋ฅผ ์ธ๋ฑ์Šค๋กœ ํ•˜์—ฌ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ฉด undefined๋ฅผ ํ™•์ธํ•˜๊ฒŒ ๋œ๋‹ค.

ECMAScript6 ๋ถ€ํ„ฐ๋Š” ์ด๋Ÿฌํ•œ ๋ถˆํŽธํ•จ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ธ Map ๊ฐ์ฒด๋ฅผ ๋ณ„๋„๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐฐ์—ด ์—ฌ๋ถ€ ํ™•์ธ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ๋ฐฐ์—ด์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

  1. Array.isArray() ๋ฉ”์†Œ๋“œ

  2. instanceof ์—ฐ์‚ฐ์ž

  3. constructor ํ”„๋กœํผํ‹ฐ

๋˜ํ•œ Array ๊ฐ์ฒด์˜ constructor ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ๋œ๋‹ค.

function isArray(a) {

    return a.constructor.toString().indexOf("Array") > -1;

}

var arr = [1, true, "JavaScript"];          // ๋ฐฐ์—ด ์ƒ์„ฑ
document.write(arr.constructor);            // constructor ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’ ์ถœ๋ ฅ
document.write(arr.constructor.toString()); // function Array() {[native code]}
document.write(arr.constructor.toString().indexOf("Array")); // 10
document.write(isArray(arr))                // true

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•จ์ˆ˜๋„ ํ•˜๋‚˜์˜ ํƒ€์ž…(datatype)์ด๋‹ค.

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

๊ฐ’์œผ๋กœ์„œ์˜ ํ•จ์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋Š” ๋ฌธ๋ฒ•์  ๊ตฌ๋ฌธ์ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ’(value)์ด๊ธฐ๋„ ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜๊ฐ€ ๋ณ€์ˆ˜์— ๋Œ€์ž…๋  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

๋ณ€์ˆ˜ ์Šค์ฝ”ํ”„

์ง€์—ญ ๋ณ€์ˆ˜(local variable)

ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜. ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๋ฉฐ, ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ๋ผ์ง„๋‹ค.

์ „์—ญ ๋ณ€์ˆ˜(global variable)

์ „์—ญ ๋ณ€์ˆ˜(global variable)๋ž€ ํ•จ์ˆ˜์˜ ์™ธ๋ถ€์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ด๋Ÿฌํ•œ ์ „์—ญ ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์–ด๋Š ์˜์—ญ์—์„œ๋‚˜ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์›น ํŽ˜์ด์ง€๊ฐ€ ๋‹ซํ˜€์•ผ๋งŒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ๋ผ์ง„๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ์—๋Š” ๋ฐ˜๋“œ์‹œ var ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค. ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ var ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด, ํ•ด๋‹น ๋ณ€์ˆ˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋œ๋‹ค.

๋˜ํ•œ, ์ „์—ญ ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์ด๋ฆ„์˜ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด, ํ•ด๋‹น ๋ธ”๋ก์—์„œ๋Š” ํ•ด๋‹น ์ด๋ฆ„์œผ๋กœ ์ง€์—ญ ๋ณ€์ˆ˜๋งŒ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฌผ๋ก  ์ด ๊ฒฝ์šฐ์—” ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ window ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์ž„์„ ๋ช…์‹œํ•˜๋ฉด ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„

๋ธ”๋ก(block)์ด๋ž€ ์ฝ”๋“œ ๋‚ด์—์„œ ์ค‘๊ด„ํ˜ธ({})๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ ๋ถ€๋ถ„์„ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋Š” ๋ธ”๋ก ๋‚ด์—์„œ ์ •์˜๋œ ๋ณ€์ˆ˜๋ฅผ ๋ธ”๋ก ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ ํ•จ์ˆ˜๋ฅผ ๋ธ”๋ก ๋Œ€์‹  ์‚ฌ์šฉํ•œ๋‹ค.

'์ „์—ญ ํ•จ์ˆ˜'๋Š” ๋ชจ๋“  ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ „์—ญ ํ•จ์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ฉด, ๋‹ค๋ฅธ ํ•จ์ˆ˜ ๋‚ด์— ์ •์˜๋œ '๋‚ด๋ถ€ ํ•จ์ˆ˜'๋Š” ๊ทธ ํ•จ์ˆ˜์˜ ๋ถ€๋ชจ ํ•จ์ˆ˜(parent function)์—์„œ ์ •์˜๋œ ๋ชจ๋“  ๋ณ€์ˆ˜ ๋ฐ ๋ถ€๋ชจ ํ•จ์ˆ˜๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋‹ค๋ฅธ ๋ณ€์ˆ˜๊นŒ์ง€๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ์ฐธ๊ณ .

// x, y, name์„ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•จ.
var x = 10, y = 20;
// sub()๋ฅผ ์ „์—ญ ํ•จ์ˆ˜๋กœ ์„ ์–ธํ•จ.
function sub() {
    return x - y;     // ์ „์—ญ ๋ณ€์ˆ˜์ธ x, y์— ์ ‘๊ทผํ•จ.
}
document.write(sub() + "<br>");
// parentFunc()์„ ์ „์—ญ ํ•จ์ˆ˜๋กœ ์„ ์–ธํ•จ.
function parentFunc() {
    var x = 1, y = 2; // ์ „์—ญ ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์ „์—ญ ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•จ.
    function add() {  // add() ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€ ํ•จ์ˆ˜๋กœ ์„ ์–ธ๋จ.
        return x + y; // ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ์ง€์—ญ ๋ณ€์ˆ˜ x, y์— ์ ‘๊ทผํ•จ.
    }
    return add();
}
document.write(parentFunc());

ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…(hoisting)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋ผ๋Š” ๊ฒƒ์€ ํ•จ์ˆ˜ ์•ˆ์—์„œ ์„ ์–ธ๋œ ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ์ „์ฒด์— ๊ฑธ์ณ ์œ ํšจํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด ์œ ํšจ ๋ฒ”์œ„์˜ ์ ์šฉ์ด ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๊ธฐ ์ „์—๋„ ๋˜‘๊ฐ™์ด ์ ์šฉ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์ง•์„ ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…(hoisting)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ๋ณ€์ˆ˜์˜ ์„ ์–ธ์€ ํ•จ์ˆ˜์˜ ๋งจ ์ฒ˜์Œ์œผ๋กœ ์ด๋™๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ๋ณด์ž.

var globalNum = 10;     // globalNum์„ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•จ.

function printNum() {
    document.write("์ง€์—ญ ๋ณ€์ˆ˜ globalNum ์„ ์–ธ ์ „์˜ globalNum์˜ ๊ฐ’์€ " + globalNum + "์ž…๋‹ˆ๋‹ค.<br>"); // โ‘ 
    var globalNum = 20; // globalNum์„ ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•จ. // โ‘ก
    document.write("์ง€์—ญ ๋ณ€์ˆ˜ globalNum ์„ ์–ธ ํ›„์˜ globalNum์˜ ๊ฐ’์€ " + globalNum + "์ž…๋‹ˆ๋‹ค.<br>");
}

printNum();

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

var globalNum = 10;     // globalNum์„ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•จ.

function printNum() {
		var globalNum; // ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ•ด ๋ณ€์ˆ˜์˜ ์„ ์–ธ ๋ถ€๋ถ„์ด ํ•จ์ˆ˜์˜ ๋งจ ์ฒ˜์Œ ๋ถ€๋ถ„์œผ๋กœ ์ด๋™๋จ.
    document.write("์ง€์—ญ ๋ณ€์ˆ˜ globalNum ์„ ์–ธ ์ „์˜ globalNum์˜ ๊ฐ’์€ " + globalNum + "์ž…๋‹ˆ๋‹ค.<br>"); // โ‘ 
    globalNum = 20; // globalNum์„ ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•จ. // โ‘ก
    document.write("์ง€์—ญ ๋ณ€์ˆ˜ globalNum ์„ ์–ธ ํ›„์˜ globalNum์˜ ๊ฐ’์€ " + globalNum + "์ž…๋‹ˆ๋‹ค.<br>");
}

printNum();

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๋”ฐ๋กœ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ์—๋„ ์ธ์ˆ˜(argument)๋กœ ์ „๋‹ฌ๋œ ๊ฐ’์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ํƒ€์ž… ๊ฒ€์‚ฌ๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ•จ์ˆ˜์˜ ์ •์˜๋ณด๋‹ค ์ ์€ ์ˆ˜์˜ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜๋”๋ผ๋„, ๋‹ค๋ฅธ ์–ธ์–ด์™€๋Š” ๋‹ฌ๋ฆฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

์ด ๊ฐ™์€ ๊ฒฝ์šฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ „๋‹ฌ๋˜์ง€ ์•Š์€ ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ž๋™์œผ๋กœ undefined ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.

arguments ๊ฐ์ฒด

๋งŒ์•ฝ ํ•จ์ˆ˜์˜ ์ •์˜๋ณด๋‹ค ๋” ๋งŽ์€ ์ˆ˜์˜ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด, ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€์ž…๋˜์ง€ ๋ชปํ•œ ์ธ์ˆ˜๋“ค์€ ์ฐธ์กฐํ•  ๋ฐฉ๋ฒ•์ด ์—†๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ arguments ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜๋ฉด, ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ์ธ์ˆ˜์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜, ๊ฐ๊ฐ์˜ ์ธ์ˆ˜์—๋„ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

arguments ๊ฐ์ฒด๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋ฅผ ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” arguments[0]์— ์ €์žฅ๋˜๋ฉฐ, ๋‹ค์Œ ์ธ์ˆ˜๋Š” arguments[1]์— ์ €์žฅ๋œ๋‹ค. ๋˜ํ•œ, ์ธ์ˆ˜์˜ ์ด ๊ฐœ์ˆ˜๋Š” arguments ๊ฐ์ฒด์˜ length ํ”„๋กœํผํ‹ฐ์— ์ €์žฅ๋œ๋‹ค.

๋””ํดํŠธ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

ECMAScript 6๋ถ€ํ„ฐ ์ƒˆ๋กญ๊ฒŒ ์ •์˜๋œ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋””ํดํŠธ ๋งค๊ฐœ๋ณ€์ˆ˜(default parameter) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์€ undefined ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.

  2. ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜(rest parameter) ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ƒ๋žต ์ ‘๋‘์‚ฌ(...)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์œ„์น˜์˜ ์ธ์ˆ˜๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ธ์ˆ˜๊นŒ์ง€๋ฅผ ํ•œ ๋ฒˆ์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฑด ์˜ˆ์ œ๋ฅผ ๋ณด์ž.

    // ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ ๋ณ€์ˆ˜ firstNum์— ์ €์žฅํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์ธ์ˆ˜๋“ค์€ ๋ฐฐ์—ด restArgs์— ์ €์žฅํ•จ.
    
    function sub(firstNum, ...restArgs) {
        for(var i = 0; i < restArgs.length; i++) {
            firstNum -= restArgs[i];
        }
        return firstNum;
    }
    
    sub(10, 2, 3);    // 10 - 2 - 3 = 5
    sub(10, 1, 5, 8); // 10 - 1 - 5 - 8 = -4

๋ฏธ๋ฆฌ ์ •์˜๋œ ์ „์—ญ ํ•จ์ˆ˜(predefined functions)

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

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฏธ๋ฆฌ ์ •์˜๋˜์–ด ์žˆ๋Š” ์ „์—ญ ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. eval() : ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜

  2. isFinite() : ์ „๋‹ฌ๋œ ๊ฐ’์ด ์œ ํ•œํ•œ ์ˆ˜์ธ์ง€๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜. ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๊ฐ’์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ฒ€์‚ฌ.

  3. isNaN()

  4. parseFloat()

  5. parseInt()

  6. decodeURI() : encodeURI() ํ•จ์ˆ˜๋‚˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ URI๋ฅผ ํ•ด๋…ํ•œ๋‹ค.

  7. decodeURIComponent()

  8. encodeURI()

  9. encodeURIComponent()

  10. escape()

  11. unescape()

  12. Number()

  13. String()

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๊ฐ์ฒด์ด๋ฆ„.ํ”„๋กœํผํ‹ฐ์ด๋ฆ„
๋˜๋Š”
๊ฐ์ฒด์ด๋ฆ„["ํ”„๋กœํผํ‹ฐ์ด๋ฆ„"]

๋ฉ”์†Œ๋“œ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋’ค์— ๊ด„ํ˜ธ(())๋ฅผ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด, ๋ฉ”์†Œ๋“œ๊ฐ€ ์•„๋‹Œ ํ”„๋กœํผํ‹ฐ ๊ทธ ์ž์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœํผํ‹ฐ ๊ทธ ์ž์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ๋ฉ”์†Œ๋“œ์˜ ์ •์˜ ๊ทธ ์ž์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

๊ฐ์ฒด์˜ ์ƒ์„ฑ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋ฆฌํ„ฐ๋Ÿด ํ‘œ๊ธฐ(literal notation)๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•

    var ๊ฐ์ฒด์ด๋ฆ„ = {
    	ํ”„๋กœํผํ‹ฐ1์ด๋ฆ„: ํ”„๋กœํผํ‹ฐ1์˜ ๊ฐ’
    	...
    }
  2. ์ƒ์„ฑ์ž ํ•จ์ˆ˜(constructor function)๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•

    var day = new Date(); // new ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Date ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•จ.
    document.write("์˜ฌํ•ด๋Š” " + day.getFullYear() + "๋…„์ž…๋‹ˆ๋‹ค.");
  3. Object.create() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ• Object.create() ๋ฉ”์†Œ๋“œ๋Š” ์ง€์ •๋œ ํ”„๋กœํ† ํƒ€์ž…(prototype) ๊ฐ์ฒด์™€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

    ๋”ฐ๋ผ์„œ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ƒ๋‹นํžˆ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

    Object.create(ํ”„๋กœํ† ํƒ€์ž…๊ฐ์ฒด[, ์ƒˆ๋กœ์šด๊ฐ์ฒด์˜ํ”„๋กœํผํ‹ฐ1, ์ƒˆ๋กœ์šด๊ฐ์ฒด์˜ํ”„๋กœํผํ‹ฐ2, ...]);

    Object.create() ๋ฉ”์†Œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ๋Š” ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด์˜ ์ถ”๊ฐ€ํ•  ํ”„๋กœํผํ‹ฐ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž… - ์ƒ์†

C#์ด๋‚˜ C++๊ณผ ๊ฐ™์€ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜(class-based)์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์™€๋Š” ๋‹ฌ๋ฆฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜(prototype-based)์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ƒ์† ๋“ฑ์˜ ๊ฐœ๋…์ด ์ข€ ๋‹ค๋ฅธ๋ฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ˜„์žฌ ์กด์žฌํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ, ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ƒ์†์ด๋ผ๊ณ  ํ•œ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž…

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ํ”„๋กœํ† ํƒ€์ž…(prototype)์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ชจ๋“  ๊ฐ์ฒด๋Š” ๊ทธ๋“ค์˜ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ๋ถ€ํ„ฐ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์† ๋ฐ›๋Š”๋‹ค.

์ด์ฒ˜๋Ÿผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ์ตœ์†Œํ•œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์ƒ์†์„ ๋ฐ›์œผ๋ฉฐ, ์ด๋•Œ ์ƒ์†๋˜๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ํ”„๋กœํ† ํƒ€์ž…(prototype)์ด๋ผ๊ณ  ํ•œ๋‹ค.

์•„ ๋‹จ ํ•˜๋‚˜, Object.prototype ๊ฐ์ฒด๋Š” ์–ด๋– ํ•œ ํ”„๋กœํ† ํƒ€์ž…๋„ ๊ฐ€์ง€์ง€ ์•Š์œผ๋ฉฐ, ์•„๋ฌด๋Ÿฐ ํ”„๋กœํผํ‹ฐ๋„ ์ƒ์†๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ(prototype chain)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๊ฐ์ฒด ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์‚ฌ์šฉํ•ด ์ƒ์„ฑ๋œ ๊ฐ™์€ ํƒ€์ž…์˜ ๊ฐ์ฒด๋“ค์€ ๋ชจ๋‘ ๊ฐ™์€ ํ”„๋กœํ† ํƒ€์ž…์„ ๊ฐ€์ง„๋‹ค.

๋˜ํ•œ, new ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ž์˜ ํ”„๋กœํ† ํƒ€์ž…์„ ์ž์‹ ์˜ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์ƒ์†๋ฐ›๋Š”๋‹ค.

์ด๋Ÿฐ ํ”„๋กœํ† ํƒ€์ž… ์ƒ์†์˜ ๊ฐ€์ƒ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ๋ฅผ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์ด๋ผ๊ณ  ํ•œ๋‹ค. Object.prototype ๊ฐ์ฒด๋Š” ์–ด๋– ํ•œ ํ”„๋กœํ† ํƒ€์ž…๋„ ๊ฐ€์ง€์ง€ ์•Š์œผ๋ฉฐ, ์•„๋ฌด๋Ÿฐ ํ”„๋กœํผํ‹ฐ๋„ ์ƒ์†๋ฐ›์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ, Object.prototype ๊ฐ์ฒด๋Š” ์ด๋Ÿฌํ•œ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์—์„œ๋„ ๊ฐ€์žฅ ์ƒ์œ„์— ์กด์žฌํ•˜๋Š” ํ”„๋กœํ† ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Math ๊ฐ์ฒด

Math ๊ฐ์ฒด๋Š” ์ˆ˜ํ•™์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ƒ์ˆ˜์™€ ํ•จ์ˆ˜๋“ค์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด ๋†“์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œ์ค€ ๋‚ด์žฅ ๊ฐ์ฒด์ด๋‹ค. Math ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ์ „์—ญ ๊ฐ์ฒด์™€๋Š” ๋‹ฌ๋ฆฌ ์ƒ์„ฑ์ž(constructor)๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋”ฐ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ Math ๊ฐ์ฒด์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋‚˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ Math ๋ฉ”์†Œ๋“œ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฒฐ๊ด๊ฐ’์„ ์–ป์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ์‹ฌ์ง€์–ด ๊ฐ™์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ผ๋„ ์šด์˜์ฒด์ œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ๊ฒฐ๊ด๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„์ฃผ ์ •ํ™•ํ•œ ๊ฒฐ๊ด๊ฐ’์ด ํ•„์š”ํ•œ ์ž‘์—…์—๋Š” Math ๋ฉ”์†Œ๋“œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

ํ•™์Šต ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ์ดํ‰

์šฐ์„  ๋ฒผ๋ฅด๊ณ  ๋ฒผ๋ฅด๋˜ javascript ์— ๋Œ€ํ•œ ํ•™์Šต์„ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. backbone.js๋ฅผ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋„๋กœ๋งŒ ๋”ฑ ํ›‘์–ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŒ€ ๋ฏธํŒ…๋„ ํŒ€์›๋“ค์„ ๋…๋ คํ•ด์„œ ๊ณต์œ ํ• ๋งŒํ•œ ์ด์Šˆ๋ฅผ ๊ณต์œ  ๋ฐ›๊ณ , ๋‹ค์Œ ํ•™์Šตํ•  ๊ฒƒ์„ ํ™•์ธํ•˜๋Š” ํ๋ฆ„์ด ์ž˜ ์ •์ฐฉ๋œ ๊ฒƒ ๊ฐ™๋„ค์š”.

ํ•™์Šต ์ผ์ •์˜ ๊ฒฝ์šฐ Rails์˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์— ๋Œ€ํ•œ ๋‚ด์šฉ๊ณผ backbone.js์— ๋Œ€ํ•ด์„œ ์–ด๋–ป๊ฒŒ ํ•™์Šต์„ ์ด์–ด๋‚˜๊ฐˆ์ง€ ์ •ํ–ˆ๊ณ , ํ•™์Šต ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ ๊ฐœ์„ ์ด ํ•„์š”ํ•˜๋‹ค ํŒ๋‹จํ•˜์—ฌ 1) ๊ฐ•์ œ๋กœ ๋””์Šค์ฝ”๋“œ ์ฐธ์—ฌ์‹œ๊ฐ„๋Œ€ ์ •ํ•˜๊ธฐ 2) ํ•™์Šต์†Œ์Šค๋ฅผ ํ†ต์ผํ•˜๊ธฐ ๋ฅผ ์‹คํ—˜ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž˜ ๋˜๋ฉด ์ข‹๊ฒ ๋„ค์š”.

๋‹ค์Œ ํ•™์Šต ๊ณ„ํš

  • javascript ๊ฐœ๋… ๋–ผ๊ธฐ. backbone js ํ•™์Šต๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์œผ๋กœ.

Last updated