ํฐ์คํ ๋ฆฌ ๋ทฐ
[JavaScript] ์ ์ญ ๋ณ์์ ๋ฌธ์ ์
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 7. 21. 01:46๋ณ์์ ์๋ช ์ฃผ๊ธฐ
๋ณ์๋ ์๋ฌผ๊ณผ ์ ์ฌํ๊ฒ ์์ฑ๋๊ณ ์๋ฉธ๋๋ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ์์ ์ด ์ ์ธ๋ ์์น์์ ์์ฑ๋๊ณ ์๋ฉธ๋ฉ๋๋ค.
๋ณ์์ ์๋ช ์ฃผ๊ธฐ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ๋ณด๋ ์์ ๋ถํฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํด์ ๋์ด ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ ํ์ ๋ฐํ๋๋ ์์ ๊น์ง๋ฅผ ์๋ฏธํฉ๋๋ค.
์ข ๋ฅ | ์๋ช ์ฃผ๊ธฐ |
์ง์ญ ๋ณ์ | - ํจ์์ ์๋ช
์ฃผ๊ธฐ์ ๋๋ถ๋ถ ์ผ์น - ํจ์๊ฐ ํธ์ถ๋๋ฉด ์์ฑ๋๊ณ ํจ์๊ฐ ์ข ๋ฃํ๋ฉด ์๋ฉธ |
์ ์ญ ๋ณ์ | - *์ ์ญ ๊ฐ์ฒด์ ์๋ช
์ฃผ๊ธฐ์ ์ผ์น - ์ฝ๋๊ฐ ๋ก๋๋์๋ง์ ๊ณง๋ฐ๋ก ํด์๋๊ณ ์คํ๋จ - ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ช ์ฃผ๊ธฐ์ ๊ฐ์ |
*์ ์ญ ๊ฐ์ฒด : ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ด์ ๋จ๊ณ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํด ์ด๋ค ๊ฐ์ฒด๋ณด๋ค๋ ๋จผ์ ์์ฑ๋๋ ํน์ํ ๊ฐ์ฒด. ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ 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
'JavaScript > ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ (0) | 2022.07.21 |
---|---|
[JavaScript] let, const ํค์๋์ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ (0) | 2022.07.21 |
[JavaScript] ์ค์ฝํ (0) | 2022.07.20 |
[JavaScript] ํจ์ (0) | 2022.07.19 |
[JavaScript] ์์ ๊ฐ๊ณผ ๊ฐ์ฒด์ ๋น๊ต (0) | 2022.07.18 |
- Total
- Today
- Yesterday
- ๋คํธ์ํฌ
- Baekjoon
- ํ๋กํผํฐ
- ์๊ณ ๋ฆฌ์ฆ
- ์นด์นด์ค ์ธํด
- http
- ํฌํฌ์ธํฐ
- ์ด์์ฒด์
- ์ฝ๋ฉํ ์คํธ
- ๋ฐฑ์ค node.js
- fp
- ๋์์ธ ํจํด
- ๋ ์์ปฌ ํ๊ฒฝ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค
- ํ๋กํ ์ฝ
- ์ ์ญ ๋ณ์
- ๋ฐฑ์ค javascript
- ์๋ฐ
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- JavaScript
- ํ๋ก๊ทธ๋๋จธ์ค
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ์ด๋ถํ์
- map
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- TDD
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- git
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |