- var temp;
Boolean(undefined) ์์๋ false
Number(undefined) ์์๋ NaN
String(undefined) ์์๋ "undefined"
- var temp = null;
- C++ ์์๋ ํฌ์ธํฐํ ๋ณ์๊ฐ ์๋ฌด ๊ฒ๋ ๊ฐ๋ฅดํค์ง ์์ ๋ nullptr์ด ๋๋ค. (null์ 0์ด ๋ํ ๋์ด์๋ค.)
- null์ ํ์
์ null์ด๋ค. ํ์ง๋ง,
typeof๋ก ์ถ๋ ฅ ๋๋ ๊ฐ์ object ์ด๋ค.์ด๋, ์ฝ๋๊ฐ ์ ๋ฐ์ดํธ ๋์ง ์์์ฑ ๋ง์ ์๊ฐ์ด ํ๋ ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ๋ค. (๋งํฌ)
Boolean(null) ์์๋ false
Number(null) ์์๋ 0
String(null) ์์๋ "null"
- undefined๋ฅผ Number๋ก ํ๋ณํ ํ๋ฉด NaN์ด ๋์ง๋ง, null์ ๋ณํํ๋ฉด 0์ด ๋์จ๋ค. ์ด๋ C++์์ null์ด 0๊ณผ ๋ํ ๋์ด์๋ ๊ฒ๊ณผ ๊ฐ๋ค.
- NaN === NaN ์ false๋ค. NaN์ ๊ฒ์ฌํ๊ธฐ ์ํด์๋
isNaN()์ด๋ผ๋ ์ ์ฉํจ์๋ฅผ ์ฌ์ฉํด์ผํ๋ค. - ํ์ง๋ง isNaN()์ string, object๋ฅผ ๋ฃ์ด๋ ์ฑ๋ฆฝ๋๋ค.
Number(undefined | string) = NaN
Boolean(NaN) ์์๋ false
Number(NaN) ์์๋ NaN
String(NaN) ์์๋ "NaN"
(1) 0์ false, ๊ทธ ์ธ ๋ชจ๋ ๊ฒ์ true์ด๋ค.
// ์ ํ ๋น๊ต๋ ๊ฐ๋ง ๋น๊ตํ๋ค.
// 0์ false ์ด๊ธฐ์ true๊ฐ ๋๋ค.
// ์๊ฒฉํ ๋น๊ต๋ ํ์
๋ ๋น๊ตํ๋ค.
// number์ธ 0๊ณผ false์ธ boolean์ ํ์
์ด ๋ค๋ฅด๋ค.
0 == false // true
0 === false // false
(2) number์ string ๋ํ, (1)๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ ๋๋ค.
1206 == "1206" // true
1206 === "1206" // false
(3) null undefined ๋น๊ต
null == undefined // true
null === undefined // false
(4) NaN
- ์ด ์น๊ตฌ๋ ์ญ์ ๋ฌด์๊ฐ๋ ๋น๊ตํ ์ ์๋ค.
undefined == NaN // false
undefined === NaN // false
null == NaN // false
null === NaN // fasle
NaN == NaN // false
NaN === NaN // false
NaN == "NaN" // false
NaN === "NaN" // false
// NaN ๊ฒ์ฌ ๋ฐฉ๋ฒ
var a = "๋ฅํฌ"; // typeof a ๋ string
a = Number(a); // a = NaN (์ซ์๊ฐ ์๋๋ค.)
isNaN(a); // true
Javascript์์๋ ์์ ํ์
(Primitive Type)๊ณผ ์ฐธ์กฐ ํ์
(Reference Type) ๋ ๊ฐ์ง ์๋ฃํ์ ์ ๊ณตํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์จํ ํ์
์ธ์ด || ๋์ ์ธ์ด์ด๋ค. ์ด ๋ง์ ๋ณ์์ ํ์
์ ๋ฏธ๋ฆฌ ์ง์ ํ ํ์๊ฐ ์๋ค๋ ์๋ฏธ์ด๋ค. ํ์
์ ํ๋ก๊ทธ๋จ์ด ์ฒ๋ฆฌ๋๋ ๊ณผ์ ์์ ์๋์ผ๋ก ํ์
๋๊ณ , ๊ฐ์ ๋ณ์์ ์ฌ๋ฌ ํ์
์ ๊ฐ์ ๋ฃ์ ์ ์๋ค๋ ๋ป์ด๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ ๊ท๋ชจ๊ฐ ์ปค์ง ์๋ก, Typescript์ ๊ฐ์ ๋์ฒด์ ๋ฅผ ์ฌ์ฉํ๋ค. (ํ์ ์ ๋ฐ๋ฅธ ์ค์๋ฅผ ๋ฐฉ์ง ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด์ ๋๊ตฌ์ด๋ค.)
var test; // undefined
test = null; // null
test = 1206; // Number
test = "Ryuk"; // String
test = true; // Boolean
test = Symbol("key"); // ES6 ์ถ๊ฐ Symbol
- ์ ์ธ๋์์ง๋ง, ์ด๊ธฐํ๊ฐ ๋์ง ์์์ ์๋ฏธํ๋ค.
- undefined ํ์ ์ undefined๋ง ๊ฐ์ ์ ์๋ค.
- ์ด๊ธฐํ๊ฐ ์งํ ๋ ๋ณ์๋ฅผ ๋ค์ undefined๋ก ์ด๊ธฐํ๋ฅผ ํ ์ ์๋ค. ํ์ง๋ง, ๋ค์ ๊ฐ์ด ์์์ ์๋ฏธํ๊ธฐ ์ํด
null์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ๊ฐ์ด undefined์ผ ๊ฒฝ์ฐ ์ด๊ธฐ ์์ฑ ๋ ์ํ๋ผ๋ ๊ฒ์ผ๋ก ์ํ๋ฅผ ์ฌ์ฉํ ์ ์์ ๊ฒ ์ด๋ค.
var test; // undefined
test = "something"; // string
// undefined ํ์ง๋ง, ๋ณดํต ์ด๊ธฐํ ๋ ์ํ์์๋ ๋ค์ undefined์ผ๋ก ์ด๊ธฐํ ํ์ง ์๋๋ค.
test = undefined; // undefined
๊ฐ์ด ์์์ ์๋ฏธํ๋ค.- null ํ์ ์ null๋ง ๊ฐ์ ์ ์๋ค.
var test; // undefined
test = null; // null
- ๋ ผ๋ฆฌ์ ์์๋ฅผ ๋ํ๋ด๋ ํ์ ์ด๊ณ , true์ false ๋ ๊ฐ์ ๊ฐ์ ์ ์๋ค.
- 0 - false ๊ทธ ์ธ, ๋ชจ๋ ๊ฐ์ true์ด๋ค.
- ์ ์, ์ค์, ์์๋ฅผ ํํํ ์ ์๋ค.
+,- Infinity/+,- 0/Number.MAX_VALUE, Number.MIN_VALUE/NaN (์ซ์ ์๋)๋ฑ ๋ค์ํ ์์๊ฐ๊ณผ ๋ฌดํ๋, 0์ ์์ ์์๋ก ํํํ๋ ๋ฑ ๋ง์ ๊ธฐ๋ฅ์ด ์๋ค.Number.MAX_SAFE_INTEGER(9007199254740991),Number.MIN_SAFE_INTEGER (-9007199254740991)ํด๋น ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด JS์์ ์ซ์๋ ๋ ์ด์ ์์ ํ์ง ์๋ค.- ๋ค๋ฃจ๋ ์ซ์๊ฐ ์ปค์ง๋ค๋ฉด, BigNumber ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ๊ฑฐ๋ ์ง์ ๋ง๋ค์ด์ผ ํ๋ค.
16์๋ฆฌ๊ฐ ๋์ด๊ฐ๋ค๋ฉด JS Number๋ฅผ ๋ค์ ์ฐพ์๋ด์ผํ๋ค๋ ์ ๋๋ง ์ธ์ง ํ๊ณ ๋์ด๊ฐ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
- ๋ฌธ์ || ํ ์คํธ๋ฅผ ๋ํ๋ด๋ ํ์ ์ด๋ค.
- ์ ๊ท์์ ํตํ์ฌ, string ํ์์ ๋ฐ๊ฟ ์ ์๋ค.
- JS ๋ฌธ์์ด์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ ์ํ(immutable)์ด๋ค. ๋ฌธ์์ด์ด ํ๋ฒ ์์ฑ ๋๋ฉด, ์ค๊ฐ์ค๊ฐ ํน์ ๊ฐ๋ค์ ์์ ํ ์ ์๋ค๋ ์ด์ผ๊ธฐ๋ค. ํ์ง๋ง, String.substr(), String.concat() ๋ฑ์ ํ์ฉํ์ฌ ๋ค์ ๋ณ์์ ๋์ ํ์ฌ ์ฌํ์ฉ ํ ์ ์๋ค.
// ์ ๊ท์์ ํตํ toLocaleString()
// 1206 -> 1,206
var test = 1206;
test.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
var test = "์๋์ธ์ฌ~~"
// immutableํ๊ธฐ ๋๋ฌธ์ ~~ ๋ง ์ญ์ ํ ์ ์๋ค.
// ํ์ง๋ง, ํจ์๋ค์ ํ์ฉํด์ ๋ณ๊ฒฝํ ์ ์๋ค.
test = test.substr(0, 4); // ์๋์ธ์ฌ
- ES6 (ECMAScript 6)์์ ์ถ๊ฐ ๋์๋ค. symbol์ ์ ์ผํ๊ณ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ(immutable)ํ ํ์ ์ด๋ค.
- ๊ฐ์ฒด ์์ฑ์ key๊ฐ์ผ๋ก ์ฌ์ฉ ๋ ์ ์๊ณ , C์ธ์ด์ enum๊ณผ ๋น์ทํ๋ค.
- Symbole์ ์ ํํ๊ฒ ์ดํดํ๊ณ ๊ณต๊ฐํ๋ ค๋ฉด, object & key์ ๋ํ์ฌ ๋จผ์ ์์์ผํ ๊ฒ ๊ฐ๋ค.
var symbol = Symbol("abc"); // Symbol(abc)
var symbol2 = Symbol("abc"); // Symbol(abc)
// ๊ฐ์ ๊ฐ์ key๋ฅผ ๋์
ํ์ฌ๋, Symbol๋ก ์ ์ธํ๋ฉด ๊ฐ์ง ์๋ค.
๋๋ถ๋ถ์ ์ธ์ด์์ ํ๋ณํ์ด ์กด์ฌํ๋ค. ์ง์ ํ๋ํ๋ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ๊ณผ ์๋์ผ๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ ์ ๋๋ก ์๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค. ๋ถ๋ช ํ ๊ฒ์ ํ๋ํ๋ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ชจ๋๊ฐ ์ถ์ฒํ ๊ฒ์ด๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ ์ด๊ธฐ๋ ํ์ง๋ง, ๊ฐ์ฅ ํผํด์ผํ ๊ธฐ๋ฅ์ด๊ธฐ๋ ํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์จํ ์ธ์ด์ด๊ธฐ์ var๋ ์ด๋ค ํ์ ์ด๋ ์๋์ ์ผ๋ก ๋ณ๊ฒฝ ๋๋ค.
1 + "Ryuk" // 1Ryuk : string
1 + "2" + 3 // 121 : string
1 + 2 + "3" // 33 : string
2 * "2" // 4 : number
1 + true // 2 : number
1 + false // 1 : number
์์ ๊ฐ ๋ ๋ณด๊ณ ์ถ๋ค๋ฉด (๋งํฌ)
- ์์ ๊ฐ์ ๊ธฐ๊ดดํ ํ์ ๋ณํ์ด ์ด๋ฃจ์ด์ง๋๋ฐ. ์ฌ์ค ๋์ผ๋ก ํ ๋ฒ ๊ฐ์ํ๋ฉด ๋๋ต์ ์ธ ๊ท์น์ ์ ์ ์๋ค. ์ด๋ ๊ฒ ๊ฐ๋ณ๊ฒ ๋ค๋ฃจ๋ ๊ฒ์ ๊ฒฐ๊ตญ ์ด๋ ๊ฒ ์ฐ๋ฉด ์๋๊ณ , ์ฝ๋๋ฅผ ์ง๋ค๋ณด๋ฉด ์ด๋ฐ ๊ธฐ๊ดดํ ์ฝ๋๋ฅผ ์์ฑํ ์ผ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง, ๋ง์ ๊ฐ๋ฐ์๋ค๊ณผ ํจ๊ป ์์ ์ ํ๋ค๋ณด๋ฉด ์ด๋ฐ ๊ธฐ๊ดดํ ์ฝ๋๊ฐ ๋์ค๊ณ ํ์ ํ๋ ๊ฐ๋ฐ์๋ค์ ํด๋น ์ฝ๋๋ฅผ ํ์ ํ๊ธฐ ์ํ์ฌ ์๊ฐ์ ๋ง์ด ์์์ผ ๋๋ ์ ์ด์ ๋ ํ์ดํธํ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
- ๋ช ์์ ํ์ ๋ณํ์ ๋ง ๊ทธ๋๋ก ๋ช ์! ํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค. Number(), parseInt(), parseFloat(), String(), Boolean() ๋ฑ์ด ์๋ค.
Number(null) // 0
Number(undefined) // NaN
Number(true) // 1
Number(false) // 0
Number(" 12 ") // 12
Number("-12.34") // -12.34
Number("\n") // 0
Number(" 12s ") // NaN
Number(123) // 123
String(123) // "123"
String(-12.3) // "-12.3"
String(null) // "null"
String(undefined) // "undefined"
String(true) // "true"
String(false) // "false"
Boolean('') // false
Boolean(0) // false
Boolean(-0) // false
Boolean(NaN) // false
Boolean(null) // false
Boolean(undefined) // false
Boolean(false) // false
Boolean({}) // true
Boolean([]) // true
Boolean(Symbol()) // true
Boolean(function() {}) // true
์์ฑํ๊ธฐ ์ฌ์ด ์ฝ๋๋ ๊น์ด์ง ์๋ก ํฐ ํผ๋์ ๊ฐ์ ธ์ค๊ฒ ๋๋ ๊ฒ ๊ฐ๋ค.
ํ์
์ ์ ๊ฒฝ ์ฐ์ง ์์ Javascript ์ฝ๋๋ก ํ์
์ ํ ์์์ ํ๋ฉด ๊ฐ์ด์ด ๋ด๋ค.
Typescript๋ฅผ ๋์
ํ๋ ํ๋ก์ ํธ์ ์๊ฐ ์ ์ฐจ ์ฆ๊ฐํ์ฌ ์ง๊ธ์ ์ฝ 28%๋ฅผ ์ฐจ์งํ๋ค๊ณ ํ๋๋ฐ.
2012๋
10์ 1์ผ ์ฝ 7๋
์ ์ ๋์จ ๊ฒ ์น๊ณ ๋น์ค์ด ์ ์ ๋์์ง๋ ์ด์ ๋ฅผ ์ ๊ฒ๋ ๊ฐ๋ค.
์ฝ 2๋ ์ , Javascript๋ฅผ ์ฒ์ ์ ํ ๋ Arrow Function์ด ๊ทธ๋ฅ ํจ์๋ฅผ ์ ์ํ ๋. ๊ผญ ์จ์ผํ๋ ๋ฌธ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋ ์์ ๋ถํฐ ECMAScript2015(ES6) ๊ฐ ์์๊ธฐ ๋๋ฌธ์ด๋ค. (์ 2015๊ฐ 6๊ฐ ๋๋์ง ๋ชจ๋ฅด๊ฒ ๋ค.) JS์ ๋ํด์ ์กฐ๊ธ ์๊ฒ ๋๊ณ , ์ค์ ์ ํ์ ๋ง๋ค ๋ '๊ตณ์ด ํ์ดํ ํจ์๋ฅผ ์จ์ผํ๋?' ์๊ฐ์ด ๋ค์๋ค. ๋๋์ฒด ์ด๊ฒ ์ ๋์๊ณ , ๋ญ๊ฐ ํธ๋ฆฌํ์ง ์์๋ณด์.
์คํฌ : (1) function์ ๋นํด ๊ตฌ๋ฌธ์ด ์งง๊ณ , (2) this, arguments, super ๋๋ new.target์ ๋ฐ์ธ๋ฉ ํ์ง ์๋๋ค.
// ES5
var foo = function () { console.log("foo") }; // foo
// ES6
var bar = () => console.log("bar"); // bar
// ES5
var plus = function (a, b) { console.log(a + b) };
plus(1,2); // 3
// ES6
var plus = (a,b) => console.log(a+b);
plus(1,2); // 3
- ์คํธ ํ์ค๋ก ๋ณด๋ ๊ทธ๋ด๋ฏ ํ๋ค. ํ์ง๋ง ์ข ๋ ์ฌ๋ฌ ์ค์ ๋ชจ์ต์ ๋ณด์.
// ES5
var GH = function () {
var first = "์ฌ๋ฌ๋ถ๋ค";
var second = "์๋์ธ์ฌ~";
setTimeout(function () {
console.log(first);
console.log(second);
}, 1000);
};
GH(); // ์ฌ๋ฌ๋ถ๋ค \n ์๋์ธ์ฌ~
// ES6
var GH = () => {
var first = "์ฌ๋ฌ๋ถ๋ค";
var second = "์๋์ธ์ฌ~";
setTimeout(() => {
console.log(first);
console.log(second);
}, 1000);
};
GH(); // ์ฌ๋ฌ๋ถ๋ค \n ์๋์ธ์ฌ~
var dataStore = [
{ "id": 1 },
{ "id": 2 },
{ "id": 3 },
{ "id": 4 },
];
// ES5
dataStore.map(function(data){
console.log(data.id);
});
// ES6
dataStore.map((data) => {
console.log(data.id);
})
- ๋ ์ฌ์ฉํ๊ธฐ ๊ฐ๋ตํด์ ธ์ ์ ๋ฐ์ดํธ๊ฐ ๋์๋ค..? ๋ฌผ๋ก , ์กฐ๊ธ์... ์์ฃผ ์กฐ๊ธ์.... ๊ฐ๋ตํด์ก๋ค๊ณ ์๊ฐํ๋ค. class ์์ ๋ค์ด๊ฐ๋ function ์ ์๊ฐ ์๋๊ณ , ๋ฌด์ธ๊ฐ ์ธ๋ผ์ธ์ผ๋ก ์ ์ํ ๋? ํ์ง๋ง, ๊ณ ์ ์ด ์ด์ ๋ง์ผ๋ก babel ์ธํ ๊น์ง ํด์ ํ์ดํ ํจ์๋ฅผ ์ฐ๋ ค๊ณ ํ์ง ์์ ๊ฒ ๊ฐ๋ค. ๋ถ๋ช ๋ค๋ฅธ ์ด์ ๊ฐ ์์ ๊ฒ ๊ฐ๋ค.
๋ฐ์ธ๋ฉ์ด๋ผ๋ ๊ฐ๋
์ ์ถํ ๋ณด๋ค ๋ ์ฌ์ธํ๊ฒ ๋ค๋ฃจ์ด๋ณผ ์์ ์ด๋ค. ๋ง๋งํ ์น๊ตฌ๊ฐ ์๋๋ค..
๊ณต์๋ฌธ์๋ฅผ ์ดํด๋ณด๋ฉด, ํ์ดํํจ์๋ '๋ฉ์๋ ํจ์๊ฐ ์๋ ๊ณณ์ ์ ๋นํ๋ค.' ๋ผ๊ณ ์ ํ์๋ค.
์ฌ๊ธฐ์๋ ๊ฐ๋จํ๊ฒ ์ฐจ์ด๋ง ๋์ ์ตํ๋ณด์.
var RyuK = {
age: 27,
arrow: () => {
// this => global
console.log(this.age)
// undefined
},
normal: function() {
console.log(this.age)
// 27
}
}
- ๊ฐ์ฒด(object)์ this๋ ๋ด๋ถ์ ํจ์๋ฅผ ํฌํจํ ๊ฐ์ฒด ์์ฒด์ ๋ฐ์ธ๋ฉ ๋๋ค.
- ์ฆ, ์์ ์์์์ Arrow Function์ ๋ฉ์๋๊ฐ ์๋์๊ธฐ ๋๋ฌธ์ this๊ฐ ๋ฐ์ธ๋ฉ ๋์ง ์์๋ค.
- ๊ณ ๋ก, ์ฌ๊ธฐ๊น์ง๋ง ์ดํด๋ณด๋ฉด Arrow Function์ this๊ฐ ๋ฐ์ธ๋ ๋์ง ์๊ธฐ ๋๋ฌธ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ด์ธ๋ฆด ๊ฒ ๊ฐ๋ค. ์ธ์๋ฅผ ๋ฃ์ด์ฃผ๊ณ return์ ํด์ฃผ๋. ํ์ง๋ง, ์ ํํ๋ ํจ์์ ๋ฉ์๋์ ์ฐจ์ด์ ๋ฐ์ธ๋์ ๋ํด์ ๋ ์์ธํ ๊ณต๋ถํด์ผ ์ ์ ์์ ๊ฒ ๊ฐ๋ค.
- ๋ฉ์๋์ ํจ์์ ์ฐจ์ด๋
์ ์์ ์ฐจ์ด๋ค. - ํ์ดํ ํจ์, ์ผ๋ฐ ํจ์ ๋ชจ๋ ๊ฐ์ฒด ์์ ์ ์ ๋๋ฉด
๋ฉ์๋๊ฐ ๋ง๋ค. - ํ์ดํ ํจ์๋ ๊ณ ์ ํ this๊ฐ ์์ด, this๋ ๊ฐ์ฒด ์ธ๋ถ ํจ์๋ก ์ง์ ๋๋ค.
- function (ํจ์)๋ ๊ทธ ์์ฒด๋ก๋ ๊ธฐ๋ฅ์ ํ๋ค.
- ํจ์๋ ๋งค์๋๋ฅผ ํฌํจํ ๋ ํฌ๊ด์ ์ธ ๊ฐ๋ ์ด๋ค.
- fucntion(); ์ผ๋ก ํธ์ถ ํ ์ ์๋ค.
- method (๋ฉ์๋)๋ ๊ฐ์ฒด ์์ ์กด์ฌ ํ๋ฉฐ, ๊ฐ์ฒด์์์ ์๋ ํ๋ค.
- ๋ฉ์๋๋ ํด๋์ค ์์ ์๋ data๋ฅผ ์กฐ์ํ ์ ์๋ค.
- object.method(); ๋ก ํธ์ถ ํ ์ ์๋ค.
function func() {
return "Call me function!";
}
var obj = {
method() {
return "Call me Method!";
}
}
var RyuK = {
age: 27,
arrow: () => {
console.log(this.age) // undefined
},
normal: function() {
console.log(this.age) // 27
}
}
์ด์ ํ์ดํ ํจ์๋ฅผ ๊ณต๋ถํ๋ฉด์ ์ฌ์ฉํ ์์ ์ด๋ค.
๊ฐ์ฒด(object)์ this๋ ๋ด๋ถ์ ํจ์๋ฅผ ํฌํจํ ๊ฐ์ฒด ์์ฒด์ ๋ฐ์ธ๋ฉ ๋๋ค. ๋ผ๋ ์ด์ ๋๋ฌธ์ ํ์ดํ ํจ์์๋ this๊ฐ ๋ฐ์ธ๋ฉ ๋์ง ์์, undefined๊ฐ ์ถ๋ ฅ๋๋ ๋ชจ์ต์ด๋ค.
ํ์ง๋ง, ์์ ํ์ดํ ํจ์๋ ํจ์๋ผ๋ ์ ์ ๋ณด๋ค๋ ๋ฉ์๋์ ์ ์์ ๋ ๊ฐ๊น๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ ๊ฐ์ฒด์์ ์กด์ฌํ๋ ํ์ดํํจ์๋ ๋ฉ์๋๊ฐ ์๋์์๊น? ์ ๋ฐ์ธ๋ฉ ๋ ์ ์์์ ๊น?
Javascript์ ๊ฐ์ฒด๋ ํ๋กํผํฐ๋ฅผ ํ ๋น ๋ฐ๊ฒ ๋๊ณ , ๊ทธ ๊ณณ์ ํจ์๋ฅผ ํ ๋น ํ๊ณ ๊ฐ์ฒด๊ฐ ํ๋ ํ ์ ์๋ ๋ฅ๋ ฅ์ ๋ถ์ฌํ๋ค.
var RyuK = {
age: 27
};
RyuK.talk = function() {
console.log("์๋น
์๋น๋น๋น
", this.age);
};
RyuK.talk(); // ~~~27
- RyuK๋ผ๋ ๊ฐ์ฒด ํ๋กํผํฐ์
talk๋ผ๋ ํจ์๋ฅผ ์ถ๊ฐ ํ๋ค. - Javascript function์ ์์ ๋ง์
this๋ฅผ ์ฌ์ฉํ ์ ์๋ค. - Jacascript Arrow function์ ์์ ๋ง์ ๊ณ ์ ํ
this๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ ๊ฒ this๋ฅผ ์ฐธ์กฐํ๋ฉด, ํ์ดํ ํจ์๊ฐ ์๋ ์ธ๋ถ ํจ์์์this๋ฅผ ๊ฐ์ง๊ณ ์จ๋ค. ์ฆ, ์ ์์ ์์๋ ๊ฐ์ฒด ๋ฐ์ this.age ๋ฅผ ๊ฐ์ง๊ณ ์ค๋ ๊ฒ์ด๋ค. ๋๋ถ๋ถ์ ๋ฉ์๋๋ ๊ฐ์ฒด ํ๋กํผํฐ์ ๊ฐ์ ์ฌ์ฉํ๋ค. ๊ทธ๋ ๊ฒ ๋ฉ์๋์ this๋ ๊ฐ์ฒด๋ฅผ this ์ฐธ์กฐํ ์ ์๋ค.
- ๊ฐ์ฒด(object)์ this๋ ๋ด๋ถ์ ํจ์๋ฅผ ํฌํจํ ๊ฐ์ฒด ์์ฒด์ ๋ฐ์ธ๋ฉ ๋๋ค.
- ํ์ดํ ํจ์๋ ๋ด๋ถ์ ํจ์ ์ฆ, ๋ฉ์๋์ด๋ค. ํ์ง๋ง, ํ์ดํ ํจ์๋ ์์ฒด ๊ณ ์ ํ this๋ฅผ ๊ฐ์ง ์๊ธฐ ๋๋ฌธ์
this.~~ === undefined๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ด์๋ค. - ๋ด๊ฐ ๊ณ์ ํผ๋์ด ์ค๋ ๊ฒ์ ES6 ๋ถํฐ ์๊ฒจ๋ class ํํ ๋๋ฌธ์ธ ๊ฒ ๊ฐ๋ค. class ๋ด๋ถ ํจ์๋ฅผ ํ์ดํ ํจ์๋ก ์ ์ ํ๋ฉด, class์ ๋ณ์๋ฅผ this๋ก ์ ๊ทผ ํ ์ ์๋ค. ์ด ๋ฌธ์ ๋ ์ฐจ์ฐจ ์ดํด ๋ณด์.
ํ์
์คํฌ๋ฆฝํธ๋ ๋ง์ดํฌ๋ก์ํํธ์์ ๊ฐ๋ฐํ๊ณ ๊ด๋ฆฌํ๋ ์คํ์์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ์กฐํฉ์ด๊ณ ์ต์ฐ ECMA์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ๋ฅธ๋ค.
ํ์
์คํฌ๋ฆฝํธ๋ ECMA์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์, ์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ฑ์ ์นจ๋ฒํ์ง ์๊ณ ์ต์ ECMA ํ์ค์ ์ง์ํ๋ค. (ECMA)
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ณด์ํ์ฌ ๋ณ์๋ ํจ์ ๋ฑ์ ๋ช
์์ ์ผ๋ก ํ์
์ ์ถ๊ฐํ ์ ์๊ฒ ํ์
์์ ์ฑ์ ๋์๊ณ , ๋ชจ๋ํ, ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ง์, ๋๊ตฌ ์ง์๋ฑ์ ํด์ค๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ํ์ดํ ์ธ์ด๋ก ์ปดํ์ผ์ ์๊ฐ์ ๋ค์ด์ง ์๊ณ , ๋์ ํ์ดํ์ ์ํํ๊ธฐ ๋๋ฌธ์ ๋ฐํ์์ ์๋๊ฐ ๋น ๋ฅด๋ค.
- ํ์ ์คํฌ๋ฆฝํธ๋ ์ ์ ํ์ดํ ์ธ์ด๋ก ์ปดํ์ผ์ ์๊ฐ์ด ๋ค์ง๋ง, ์ปดํ์ผ ์ดํ ๋์์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ๋ค.
์์ ๊ฐ์ ์ด์ ๋ก ๋จ์ํ ํ์
์คํฌ๋ฆฝํธ๋ ์๋๊ฐ ๋๋ฆฌ๋ค. ๋ผ๊ณ ์๊ฐํ๋ ๊ณณ์ ์คํด์ด๋ค.
ํ์
์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋์ฒดํ๋ค๊ธฐ ๋ณด๋ค, ๋ณด์ํ๋ ์ญํ ์ ๋ด๋นํ๋ค.
ํ์
์คํฌ๋ฆฝํธ = ์๋ฐ์คํฌ๋ฆฝํธ + ํ์
์ด๋ผ๊ณ ํํ ๋๊ธฐ๋ ํ๋ค.
:string ํ์
์คํฌ๋ฆฝํธ๋ ํ์
์ด๋
ธํ
์ด์
(type annotation) ์ ์ด์ฉํด ๋ณ์์ ํ์
์ ์ ์ธํ ์ ์๊ฒ ํ๋ค.
const foo: string = "Foo";
- Typescript๋ฅผ ์ง์ํ๋ ์๋ํฐ๊ฐ ํ์ ์ ํจ์ฑ์ ์ค์๊ฐ์ผ๋ก ๊ฒ์ฌํ๋ค.
- ๋ฌธ์ ๊ฐ ์๋ค๋ฉด, ํ์
์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ(tsc)๋ฅผ ์คํํ์ฌ
ํ์ ๊ฒ์ฌ,์ด๋ ธํ ์ด์ ์ ๊ฑฐ๋ฅผ ์งํํ๋ค. - ์ถ๋ ฅ ํ์ผ ์์ฑ (JavaScript)
๊ฒฐ๋ก ์ ์ผ๋ก, ํ์
์ ๋ํ ๊ฒ์ฌ๋ฅผ ์งํํ๊ณ ์ด๋ฅผ ์ปดํ์ผ ๊ณผ์ ์์ ๋ค์ ์ ๊ฑฐ๋ฅผ ํด์ค๋ค.
ํ์
์ด ์ถ๊ฐ ๋์์ง๋ง, ์ปดํ์ผ ํ ์คํ๋๋ ํ์ผ์ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์ด๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์นจ๋ฒํ์ง ์๋๋ค.
if(typeof text !== "string") throw "๋ฌธ์์ด ์๋";
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์์ ๊ฐ์ ์์ธ ์ฒ๋ฆฌ๋ก ๊ฒ์ฌ๋ฅผ ํด์ผํ๋ค.
if๋ฌธ์ ์ด์ฉํ ํ์
๊ฒ์ฌ๊ฐ ๋ง์์ง์๋ก ๋ฐํ์์ ๋ถํ์ํ ํ์
๊ฒ์ฌ๋ฅผ ํ๊ฒ ๋๋ค.
ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด, ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์๋ค.
ํ์
์คํฌ๋ฆฝํธ๋ ์๋ํฐ์์ ํ์
๊ฒ์ฌ๊ฐ 1์ฐจ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค. ๊ทธ ํ, ๋ฌธ์ ๊ฐ ์๋ค๋ฉด tsc๋ฅผ ์ด์ฉํ์ฌ ํ์
์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ๊ฐ ์คํ ๋๋ค. ์ด์์ด ์๋ค๋ฉด JS ์ฝ๋๋ก ๋ณํ ๋๊ณ , ์ด ์ถ๋ ฅํ์ผ์์๋ ๋ณ๋์ ํ์
๊ฒ์ฌ๋ฅผ ํ์ง ์์๋ ๋ฌธ์ ๊ฐ ์๋ค.
ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ข์ํ์ง ์๋ ๊ฐ๋ฐ์๋ค์ Javascript์ ์ฅ์ ์ธ ๊ฐ๋ฐ ์๋๋ฅผ ํด์น๋ค! ๋ผ๊ณ ๋งํ๊ณค ํ๋ค. ์ด ๋ง์ ํ๋ฆฌ์ง ์์์ง๋ง ์ด๋๊น์ง๋ ์์ ์๋น์ค, ์ ์ ๊ท๋ชจ์ ๊ฐ๋ฐ์์ ํ์ ๋ ์ด์ผ๊ธฐ ๊ฐ๋ค.