ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ณ€์ˆ˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ

๋ณ€์ˆ˜๋Š” ์ƒ๋ฌผ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ƒ์„ฑ๋˜๊ณ  ์†Œ๋ฉธ๋˜๋Š” ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์ž์‹ ์ด ์„ ์–ธ๋œ ์œ„์น˜์—์„œ ์ƒ์„ฑ๋˜๊ณ  ์†Œ๋ฉธ๋ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ™•๋ณด๋œ ์‹œ์ ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ•ด์ œ๋˜์–ด ๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ ํ’€์— ๋ฐ˜ํ™˜๋˜๋Š” ์‹œ์ ๊นŒ์ง€๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

์ข…๋ฅ˜ ์ƒ๋ช… ์ฃผ๊ธฐ
์ง€์—ญ ๋ณ€์ˆ˜ - ํ•จ์ˆ˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ์™€ ๋Œ€๋ถ€๋ถ„ ์ผ์น˜
- ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์ƒ์„ฑ๋˜๊ณ  ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒํ•˜๋ฉด ์†Œ๋ฉธ
์ „์—ญ ๋ณ€์ˆ˜ - *์ „์—ญ ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ์™€ ์ผ์น˜
- ์ฝ”๋“œ๊ฐ€ ๋กœ๋“œ๋˜์ž๋งˆ์ž ๊ณง๋ฐ”๋กœ ํ•ด์„๋˜๊ณ  ์‹คํ–‰๋จ
- ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ์™€ ๊ฐ™์Œ

 

*์ „์—ญ ๊ฐ์ฒด : ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ด์ „ ๋‹จ๊ณ„์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ์–ด๋–ค ๊ฐ์ฒด๋ณด๋‹ค๋„ ๋จผ์ € ์ƒ์„ฑ๋˜๋Š” ํŠน์ˆ˜ํ•œ ๊ฐ์ฒด. ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์€ window ๊ฐ์ฒด, Node.js ํ™˜๊ฒฝ์—์„œ๋Š” global ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•จ

 

 

์ „์—ญ ๋ณ€์ˆ˜์˜ ๋ฌธ์ œ์ 

var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋˜๋Š”๋ฐ, ์ด๋Ÿฐ ์ „์—ญ ๋ณ€์ˆ˜์—” 4๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

์•”๋ฌต์  ๊ฒฐํ•ฉ

  • ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • ๋ณ€์ˆ˜์˜ ์œ ํšจ๋ณ€์œ„๊ฐ€ ํฌ๋ฉด ํด์ˆ˜๋ก ๊ฐ€๋…์„ฑ์ด ๋‚˜๋น ์ง€๊ณ  ์˜๋„์น˜ ์•Š๊ฒŒ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜์„ฑ์ด ๋†’์•„์ง

๊ธด ์ƒ๋ช… ์ฃผ๊ธฐ

  • ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ๊ธธ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์˜ค๋žœ ๊ธฐ๊ฐ„ ์†Œ๋น„ํ•จ
  • ์ „์—ญ ๋ณ€์ˆ˜์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๊ณ  ๊ธฐํšŒ๊ฐ€ ๋งŽ์•„์ง
  • var ํ‚ค์›Œ๋“œ๋Š” ๋ณ€์ˆ˜์˜ ์ค‘๋ณต ์„ ์–ธ์„ ํ—ˆ์šฉํ•ด์„œ ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ์ค‘๋ณต๋˜์–ด ์˜๋„์น˜ ์•Š์€ ์žฌํ• ๋‹น์ด ์ผ์–ด๋‚จ

์Šค์ฝ”ํ”„ ์ฒด์ธ ์ƒ์—์„œ ์ข…์ ์— ์กด์žฌ

  • ๋ณ€์ˆ˜๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๊ฒ€์ƒ‰๋จ
  • ์ „์—ญ ๋ณ€์ˆ˜์˜ ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๊ฐ€์žฅ ๋Š๋ฆผ

๋„ค์ž„์ŠคํŽ˜์ด์Šค ์˜ค์—ผ

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

 

 

์ „์—ญ ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ์„ ์–ต์ œํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„๋Š” ์ข์„์ˆ˜๋ก ์ข‹๊ธฐ ๋•Œ๋ฌธ์— ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ „์—ญ ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ์„ ์–ต์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ๋ช‡๊ฐ€์ง€๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜

(function () {
    var foo = 10; // ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜์˜ ์ง€์—ญ ๋ณ€์ˆ˜
}());

console.log(foo); // ReferenceError
  • ํ•จ์ˆ˜ ์ •์˜์™€ ๋™์‹œ์— ํ˜ธ์ถœ๋˜๋Š” ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋Š” ๋‹จ ํ•œ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋จ
  • ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋กœ ๊ฐ์‹ธ๋ฉด ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜์˜ ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€๋จ
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹

๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ์ฒด

var MYAPP = {}; // ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ์ฒด

// ๋ณ€์ˆ˜๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ์ถ”๊ฐ€
MYAPP.name = 'Lee';

// ๊ฐ์ฒด๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ์ถ”๊ฐ€
MYAPP.person = {
    name: 'Lee',
    address: 'Seoul'
};

console.log(MYAPP.name); // Lee
console.log(MYAPP.person.name); // Lee
  • ์ „์—ญ์— ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—ญํ• ์„ ๋‹ด๋‹นํ•  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ „์—ญ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๋ณ€์ˆ˜๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ์ถ”๊ฐ€
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ์ฒด์— ๋˜ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ์ฒด๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ์ถ”๊ฐ€ํ•ด ๊ณ„์ธต์ ์œผ๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ
  • ์‹๋ณ„์ž ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜์ง€๋งŒ, ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ์ฒด๊ฐ€ ์ „์—ญ ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜์–ด ํšจ์œจ์ ์ด์ง„ ์•Š์Œ

๋ชจ๋“ˆ ํŒจํ„ด

๋ชจ๋“ˆ ํŒจํ„ด์€ ํด๋ž˜์Šค๋ฅผ ๋ชจ๋ฐฉํ•ด์„œ ๊ด€๋ จ์ด ์žˆ๋Š” ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ๋ชจ์•„ ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋กœ ๊ฐ์‹ธ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํด๋กœ์ €๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ „์—ญ ๋ณ€์ˆ˜์˜ ์–ต์ œ์™€ ์บก์Šํ™”๋ฅผ ๊ตฌํ˜„ํ•ด ์ •๋ณด๋ฅผ ์€๋‹‰ํ•ฉ๋‹ˆ๋‹ค.

var Counter = (function () {
    // private ๋ณ€์ˆ˜
    var num = 0;

    // ์™ธ๋ถ€๋กœ ๊ณต๊ฐœํ•  ๋ฐ์ดํ„ฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ์ถ”๊ฐ€ํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
    return {
        increase() {
            return ++num;
        },
        decrease() {
            return --num;
        }
    };
}());

// private ๋ณ€์ˆ˜๋Š” ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š์Œ
console.log(Counter.num); // undefined
console.log(Counter.increase()); // 1
console.log(Counter.increase()); // 2
console.log(Counter.decrease()); // 1
console.log(Counter.decrease()); // 0

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

 

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

 

ES6 ๋ชจ๋“ˆ

ES6 ๋ชจ๋“ˆ์€ ํŒŒ์ผ ์ž์ฒด์˜ ๋…์ž์ ์ธ ๋ชจ๋“ˆ ์Šค์ฝ”ํ”„๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

<script type="module" src="lib.mjs"></script>
<script type="module" src="app.mjs"></script>
  • IE๋ฅผ ํฌํ•จํ•œ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š์Œ
  • ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง์ด๋‚˜ ๋ฒˆ๋“ค๋ง์ด ํ•„์š”ํ•จ
  • ์•„์ง๊นŒ์ง€๋Š” ES6 ๋ชจ๋“ˆ ๊ธฐ๋Šฅ๋ณด๋‹จ Webpack ๋“ฑ์˜ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 

 

 

 

[์ถœ์ฒ˜] ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive

https://wikibook.co.kr/mjs/

 

๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ

269๊ฐœ์˜ ๊ทธ๋ฆผ๊ณผ ์›๋ฆฌ๋ฅผ ํŒŒํ—ค์น˜๋Š” ์„ค๋ช…์œผ๋กœ ‘์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ’๋ฅผ ์ดํ•ดํ•˜์ž! ์›นํŽ˜์ด์ง€์˜ ๋‹จ์ˆœํ•œ ๋ณด์กฐ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ œํ•œ์ ์ธ ์šฉ๋„๋กœ ํƒœ์–ด๋‚œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ณผ๋„

wikibook.co.kr