Skip to content
This repository was archived by the owner on Jul 24, 2026. It is now read-only.

RyuK-H/TIL

Repository files navigation

๊ฐ„๋‹จํ•˜๊ฒŒ ๋๋‚ด๋Š” ๊ฐœ๋… ์ •๋ฆฌ

(1) [JS] undefined / null / NaN ์ฐจ์ด

undefined : ์„ ์–ธ์€ ๋˜์—ˆ์œผ๋‚˜ ๊ฐ’์ด ํ• ๋‹น ๋˜์ง€ ์•Š์€ ์ƒํƒœ

  • var temp;
Boolean(undefined) ์—์„œ๋Š” false
Number(undefined) ์—์„œ๋Š” NaN
String(undefined) ์—์„œ๋Š” "undefined"

null : ์•„๋ฌด๋Ÿฐ ๊ฐ’๋„ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š๋Š” ํŠน์ˆ˜ํ•œ ๊ฐ’

  • var temp = null;
  • C++ ์—์„œ๋Š” ํฌ์ธํ„ฐํ˜• ๋ณ€์ˆ˜๊ฐ€ ์•„๋ฌด ๊ฒƒ๋„ ๊ฐ€๋ฅดํ‚ค์ง€ ์•Š์„ ๋•Œ nullptr์ด ๋œ๋‹ค. (null์€ 0์ด ๋ž˜ํ•‘ ๋˜์–ด์žˆ๋‹ค.)
  • null์˜ ํƒ€์ž…์€ null์ด๋‹ค. ํ•˜์ง€๋งŒ, typeof๋กœ ์ถœ๋ ฅ ๋˜๋Š” ๊ฐ’์€ object ์ด๋‹ค. ์ด๋Š”, ์ฝ”๋“œ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์ง€ ์•Š์€์ฑ„ ๋งŽ์€ ์‹œ๊ฐ„์ด ํ˜๋ €๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•œ๋‹ค. (๋งํฌ)
Boolean(null) ์—์„œ๋Š” false
Number(null) ์—์„œ๋Š” 0
String(null) ์—์„œ๋Š” "null"

NaN : JS์—์„œ๋งŒ ์กด์žฌํ•˜๋Š” '์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋‹ค'๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฐ’

  • 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"

(2) [JS] == / === ์ฐจ์ด์ 

๊ฒฐ๋ก  : == ์œ ํ˜• ๋น„๊ต๋Š” ๊ฐ’๋งŒ ๋น„๊ต, === ์—„๊ฒฉํ•œ ๋น„๊ต๋Š” ํƒ€์ž…๋„ ๋น„๊ต

(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

์œ ํ˜• ๋น„๊ต == ๋ณด๋‹ค๋Š” ์—„๊ฒฉํ•œ ๋น„๊ต === ๋ฅผ ์ถ”์ฒœ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.


(3) [JS] ์›์‹œ ํƒ€์ž…

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

(1) undefined

  • ์„ ์–ธ๋˜์—ˆ์ง€๋งŒ, ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•œ๋‹ค.
  • undefined ํƒ€์ž…์€ undefined๋งŒ ๊ฐ–์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ดˆ๊ธฐํ™”๊ฐ€ ์ง„ํ–‰ ๋œ ๋ณ€์ˆ˜๋ฅผ ๋‹ค์‹œ undefined๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋‹ค์‹œ ๊ฐ’์ด ์—†์Œ์„ ์˜๋ฏธํ•˜๊ธฐ ์œ„ํ•ด null์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ๊ฐ’์ด undefined์ผ ๊ฒฝ์šฐ ์ดˆ๊ธฐ ์ƒ์„ฑ ๋œ ์ƒํƒœ๋ผ๋Š” ๊ฒƒ์œผ๋กœ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ์ด๋‹ค.
var test;               // undefined
test = "something";     // string

// undefined ํ•˜์ง€๋งŒ, ๋ณดํ†ต ์ดˆ๊ธฐํ™” ๋œ ์ƒํƒœ์—์„œ๋Š” ๋‹ค์‹œ undefined์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•˜์ง€ ์•Š๋Š”๋‹ค.
test = undefined;       // undefined

(2) null

  • ๊ฐ’์ด ์—†์Œ์„ ์˜๋ฏธํ•œ๋‹ค.
  • null ํƒ€์ž…์€ null๋งŒ ๊ฐ–์„ ์ˆ˜ ์žˆ๋‹ค.
var test;       // undefined
test = null;    // null

(3) Boolean

  • ๋…ผ๋ฆฌ์  ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํƒ€์ž…์ด๊ณ , true์™€ false ๋‘ ๊ฐ’์„ ๊ฐ–์„ ์ˆ˜ ์žˆ๋‹ค.
  • 0 - false ๊ทธ ์™ธ, ๋ชจ๋“  ๊ฐ’์€ true์ด๋‹ค.

(4) Number

  • ์ •์ˆ˜, ์‹ค์ˆ˜, ์Œ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • +,- 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๋ฅผ ๋‹ค์‹œ ์ฐพ์•„๋ด์•ผํ•œ๋‹ค๋Š” ์ •๋„๋งŒ ์ธ์ง€ ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

(5) String

  • ๋ฌธ์ž || ํ…์ŠคํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํƒ€์ž…์ด๋‹ค.
  • ์ •๊ทœ์‹์„ ํ†ตํ•˜์—ฌ, 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);  // ์•ˆ๋ƒ์„ธ์—ฌ

(6) Symbol

  • 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๋กœ ์„ ์–ธํ•˜๋ฉด ๊ฐ™์ง€ ์•Š๋‹ค.

(4) [JS] ํ˜•๋ณ€ํ™˜

๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—์„œ ํ˜•๋ณ€ํ™˜์ด ์กด์žฌํ•œ๋‹ค. ์ง์ ‘ ํ•œ๋•€ํ•œ๋•€ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ• ์ •๋„๋กœ ์ƒ๊ฐ€ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋ถ„๋ช… ํ•œ ๊ฒƒ์€ ํ•œ๋•€ํ•œ๋•€ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๋ชจ๋‘๊ฐ€ ์ถ”์ฒœํ•  ๊ฒƒ์ด๋‹ค.

์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜(Implicit Coercion)

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ•์ ์ด๊ธฐ๋„ ํ•˜์ง€๋งŒ, ๊ฐ€์žฅ ํ”ผํ•ด์•ผํ•  ๊ธฐ๋Šฅ์ด๊ธฐ๋„ ํ•˜๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋А์Šจํ•œ ์–ธ์–ด์ด๊ธฐ์— 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

์˜ˆ์ œ๊ฐ€ ๋” ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด (๋งํฌ)

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

๋ช…์‹œ์  ํƒ€์ž… ๋ณ€ํ™˜ (Explicit Coercion)

  • ๋ช…์‹œ์  ํƒ€์ž… ๋ณ€ํ™˜์€ ๋ง ๊ทธ๋Œ€๋กœ ๋ช…์‹œ! ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 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๋…„์ „์— ๋‚˜์˜จ ๊ฒƒ ์น˜๊ณ  ๋น„์ค‘์ด ์ ์  ๋†’์•„์ง€๋Š” ์ด์œ ๋ฅผ ์•Œ ๊ฒƒ๋„ ๊ฐ™๋‹ค.


(5) [JS] ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

์•ฝ 2๋…„์ „, Javascript๋ฅผ ์ฒ˜์Œ ์ ‘ํ•  ๋•Œ Arrow Function์ด ๊ทธ๋ƒฅ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ. ๊ผญ ์จ์•ผํ•˜๋Š” ๋ฌธ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋‚œ ์‹œ์ž‘ ๋ถ€ํ„ฐ ECMAScript2015(ES6) ๊ฐ€ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (์™œ 2015๊ฐ€ 6๊ฐ€ ๋˜๋Š”์ง„ ๋ชจ๋ฅด๊ฒ ๋‹ค.) JS์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ์•Œ๊ฒŒ ๋˜๊ณ , ์‹ค์ œ ์ œํ’ˆ์„ ๋งŒ๋“ค ๋•Œ '๊ตณ์ด ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์จ์•ผํ•˜๋‚˜?' ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๋„๋Œ€์ฒด ์ด๊ฒŒ ์™œ ๋‚˜์™”๊ณ , ๋ญ๊ฐ€ ํŽธ๋ฆฌํ•œ์ง€ ์•Œ์•„๋ณด์ž.

์Šคํฌ : (1) function์— ๋น„ํ•ด ๊ตฌ๋ฌธ์ด ์งง๊ณ , (2) this, arguments, super ๋˜๋Š” new.target์„ ๋ฐ”์ธ๋”ฉ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

1. function์— ๋น„ํ•ด ๊ตฌ๋ฌธ์ด ์งง๋‹ค.

// 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 ์„ธํŒ…๊นŒ์ง€ ํ•ด์„œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ ค๊ณ  ํ•˜์ง„ ์•Š์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋ถ„๋ช… ๋‹ค๋ฅธ ์ด์œ ๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

2. ๋ฐ”์ธ๋”ฉ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ฐ”์ธ๋”ฉ์ด๋ผ๋Š” ๊ฐœ๋…์€ ์ถ”ํ›„ ๋ณด๋‹ค ๋” ์„ฌ์„ธํ•˜๊ฒŒ ๋‹ค๋ฃจ์–ด๋ณผ ์˜ˆ์ •์ด๋‹ค. ๋งŒ๋งŒํ•œ ์นœ๊ตฌ๊ฐ€ ์•„๋‹ˆ๋‹ค..

๊ณต์‹๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ํ™”์‚ดํ‘œํ•จ์ˆ˜๋Š” '๋ฉ”์†Œ๋“œ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ณณ์— ์ ๋‹นํ•˜๋‹ค.' ๋ผ๊ณ  ์ ํ˜€์žˆ๋‹ค.
์—ฌ๊ธฐ์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฐจ์ด๋งŒ ๋ˆˆ์— ์ตํ˜€๋ณด์ž.

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์„ ํ•ด์ฃผ๋Š”. ํ•˜์ง€๋งŒ, ์ •ํ™•ํžˆ๋Š” ํ•จ์ˆ˜์™€ ๋ฉ”์†Œ๋“œ์˜ ์ฐจ์ด์™€ ๋ฐ”์ธ๋“œ์— ๋Œ€ํ•ด์„œ ๋” ์ž์„ธํžˆ ๊ณต๋ถ€ํ•ด์•ผ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

(6) [JS] ๋ฉ”์†Œ๋“œ์™€ ํ•จ์ˆ˜

[์Šคํฌ]

  • ๋ฉ”์†Œ๋“œ์™€ ํ•จ์ˆ˜์˜ ์ฐจ์ด๋Š” ์ •์˜์˜ ์ฐจ์ด๋‹ค.
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, ์ผ๋ฐ˜ ํ•จ์ˆ˜ ๋ชจ๋‘ ๊ฐ์ฒด ์•ˆ์— ์ •์˜ ๋˜๋ฉด ๋ฉ”์†Œ๋“œ๊ฐ€ ๋งž๋‹ค.
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ๊ณ ์œ ํ•œ 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๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๋ชจ์Šต์ด๋‹ค.

ํ•˜์ง€๋งŒ, ์œ„์˜ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜๋ผ๋Š” ์ •์˜ ๋ณด๋‹ค๋Š” ๋ฉ”์†Œ๋“œ์˜ ์ •์˜์— ๋” ๊ฐ€๊น๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด, ์™œ ๊ฐ์ฒด์•ˆ์— ์กด์žฌํ•˜๋Š” ํ™”์‚ดํ‘œํ•จ์ˆ˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์•„๋‹ˆ์˜€์„๊นŒ? ์™œ ๋ฐ”์ธ๋”ฉ ๋  ์ˆ˜ ์—†์—ˆ์„ ๊นŒ?

# function๊ณผ Arrow function

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๋กœ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ฐจ์ฐจ ์‚ดํŽด ๋ณด์ž.

(7) [TS] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ž€?

๊ฐœ์š”

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

ํŠน์ง•

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋™์  ํƒ€์ดํ•‘ ์–ธ์–ด๋กœ ์ปดํŒŒ์ผ์— ์‹œ๊ฐ„์„ ๋“ค์ด์ง€ ์•Š๊ณ , ๋™์  ํƒ€์ดํ•‘์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Ÿฐํƒ€์ž„์‹œ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ •์  ํƒ€์ดํ•‘ ์–ธ์–ด๋กœ ์ปดํŒŒ์ผ์— ์‹œ๊ฐ„์ด ๋“ค์ง€๋งŒ, ์ปดํŒŒ์ผ ์ดํ›„ ๋™์ž‘์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™๋‹ค.

์œ„์™€ ๊ฐ™์€ ์ด์œ ๋กœ ๋‹จ์ˆœํžˆ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค. ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ณณ์€ ์˜คํ•ด์ด๋‹ค.
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋Œ€์ฒดํ•œ๋‹ค๊ธฐ ๋ณด๋‹ค, ๋ณด์™„ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ = ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ + ํƒ€์ž… ์ด๋ผ๊ณ  ํ‘œํ˜„ ๋˜๊ธฐ๋„ ํ•œ๋‹ค.

๋™์ž‘ ๊ณผ์ •

:string ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜(type annotation) ์„ ์ด์šฉํ•ด ๋ณ€์ˆ˜์— ํƒ€์ž…์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

const foo: string = "Foo";
  1. Typescript๋ฅผ ์ง€์›ํ•˜๋Š” ์—๋””ํ„ฐ๊ฐ€ ํƒ€์ž… ์œ ํšจ์„ฑ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฒ€์‚ฌํ•œ๋‹ค.
  2. ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ(tsc)๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํƒ€์ž… ๊ฒ€์‚ฌ, ์ด๋…ธํ…Œ์ด์…˜ ์ œ๊ฑฐ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
  3. ์ถœ๋ ฅ ํŒŒ์ผ ์ƒ์„ฑ (JavaScript)

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

๊ทธ๋ž˜์„œ ์™œ ์”€?

if(typeof text !== "string") throw "๋ฌธ์ž์—ด ์•„๋‹˜";

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์œ„์™€ ๊ฐ™์€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋กœ ๊ฒ€์‚ฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.
if๋ฌธ์„ ์ด์šฉํ•œ ํƒ€์ž… ๊ฒ€์‚ฌ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋Ÿฐํƒ€์ž„์— ๋ถˆํ•„์š”ํ•œ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์—๋””ํ„ฐ์—์„œ ํƒ€์ž… ๊ฒ€์‚ฌ๊ฐ€ 1์ฐจ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ๊ทธ ํ›„, ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด tsc๋ฅผ ์ด์šฉํ•˜์—ฌ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‹คํ–‰ ๋œ๋‹ค. ์ด์ƒ์ด ์—†๋‹ค๋ฉด JS ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ ๋˜๊ณ , ์ด ์ถœ๋ ฅํŒŒ์ผ์—์„œ๋Š” ๋ณ„๋„์˜ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š” ๊ฐœ๋ฐœ์ž๋“ค์€ Javascript์˜ ์žฅ์ ์ธ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ํ•ด์นœ๋‹ค! ๋ผ๊ณ  ๋งํ•˜๊ณค ํ•œ๋‹ค. ์ด ๋ง์€ ํ‹€๋ฆฌ์ง€ ์•Š์•˜์ง€๋งŒ ์–ด๋””๊นŒ์ง€๋‚˜ ์ž‘์€ ์„œ๋น„์Šค, ์ ์€ ๊ทœ๋ชจ์˜ ๊ฐœ๋ฐœ์ž์— ํ•œ์ •๋œ ์ด์•ผ๊ธฐ ๊ฐ™๋‹ค.

๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ํ•จ๊ป˜ ์ผํ•  ๋•Œ, ์—ผ๊ฒฉํ•˜์ง€ ๋ชปํ•œ ๊ทœ์น™์€ ์‹ค์ˆ˜๋ฅผ ๋ฐœ์ƒ ์‹œํ‚ค๊ณ  ์–ด์ฉŒ๋ฉด ๊ทธ๊ฒƒ์ด ๊ฐ์ •์—๋„ ์˜ํ–ฅ์„ ์ค€๋‹ค.
๋‹จ์ˆœํ•œ ํšŒ์‚ฌ ์†Œ๊ฐœ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉด, Typescript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

About

Today I Learned

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages