๋ชฉ์ฐจ
3.1 ํ์
์ ์ด์ผ๊ธฐํ๋ค
3.2 ํ์
์ ๊ฐ๋๋ค
3.3 ๋ง์น๋ฉฐ
3์ฅ์์๋ ํ์ ์คํฌ๋ฆฝํธ์์ ์ด์ฉํ ์ ์๋ ํ์ ์ ์ดํด๋ณด๊ณ , ๊ฐ๊ฐ์ ํ์ ์ผ๋ก ๋ฌด์์ ํ ์ ์๋์ง๋ฅผ ๋ค๋ฃจ๊ณ ์๋ค.

3.1 ํ์ ์ ์ด์ผ๊ธฐํ๋ค
ํ์ ์คํฌ๋ฆฝํธ๋ ํน์ ํ์ ๋ง ์์ผ ํ ๋ ์ด๋ฅผ ๋ช ์ํ ์ ์๋ ์ธ์ด๋ค.
3.2 ํ์ ์ ๊ฐ๋๋ค
ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์ง์ํ๋ ๊ฐ๊ฐ์ ํ์ ์ ์ดํด๋ณด๋ฉฐ ๊ฐ ํ์ ์ด ๋ฌด์์ ํฌํจํ ์ ์๋์ง, ์ด๋ค ๋์์ ์ํํ ์ ์๋์ง๋ฅผ ์ดํด๋ณด์. ํ์ ๋ณ์นญ(type alias), ์ ๋์จ ํ์ (union type), ์ธํฐ์น์ ํ์ (intersection type) ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ธ์ด ๊ธฐ๋ฅ๋ ํ์ธํ๋ค.
3.2.1 any
any๋ก๋ ๋ญ๋ ์ง ํ ์ ์์ง๋ง ๊ผญ ํ์ํ ์ํฉ์ด ์๋๋ผ๋ฉด ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค. ํ์
์คํฌ๋ฆฝํธ์์๋ ์ปดํ์ผ ํ์์ ๋ชจ๋๊ฐ ํ์
์ด ์์ด์ผ ํ๋ฏ๋ก ํ๋ก๊ทธ๋๋จธ์ ํ์
์คํฌ๋ฆฝํธ ๋ ๋ค ํ์
์ ์ ์ ์๋ ์ํฉ์์๋ ๊ธฐ๋ณธ ํ์
์ธ any๋ผ๊ณ ๊ฐ์ ํ๋ค.
any๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ์ฒ๋ผ ๋์ํ๊ธฐ ์์ํ๋ฉด์ ํ์๊ฒ์ฌ๊ธฐ๊ฐ ๋ ์ด์ ์๋ํ์ง ์๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๋๋๋ก any๋ฅผ ํผํ๋ ๊ฒ์ด ์ข๋ค.
๋๋ฌธ ์ํฉ์ด์ง๋ง any๊ฐ ๊ผญ ํ์ํ๋ค๋ฉด ๋ค์์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
let a: any = 666 // any
let b: any = ['danger'] // any
let c = a + b // any, ํ์
์คํฌ๋ฆฝํธ์ ๋ ๊ฐ์ any๋ฅผ ๋ํ๋ผ๊ณ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ธ ๋ฒ์งธ ์ค์์๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
any๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ช ์์ ์ผ๋ก ์ ์ธํด์ผ ํ๋ค. ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์ด๋ค ๊ฐ์ any๋ก ์ถ๋ก ํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด ํธ์ง๊ธฐ์ ๋นจ๊ฐ ๋ฐ์ค์ด ํ์๋๋ฉด์ ์ปดํ์ผ ํ์ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค. a์ b์ ํ์ ์ ๋ช ์์ ์ผ๋ก any ํ์ (: any)์ผ๋ก ์ค์ ํด ํ์ ์คํฌ๋ฆฝํธ์๊ฒ ๊ฐ๋ฐ์์ ์๋ํ๋ ๋ฐ๋ฅผ ์๋ ค์ค ์ ์์ผ๋ฉด ์์ธ๋ ๋ฐ์ํ์ง ์๋๋ค.
TSC ํ๋๊ทธ: nolmplicitAny
ํ์ ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ณธ ์ค์ ์ ์์ ๋ฅผ ํ์ฉํ๋ฏ๋ก any๋ก ์ถ๋ก ๋๋ ๊ฐ์ ๋ฐ๊ฒฌํ๋๋ผ๋ ์์ธ๋ฅผ ๋ฐ์์ํค์ง ์๋๋ค. ๊ทธ๋ฌ๋ ์๋ฌต์ ์ธ any๊ฐ ๋ํ๋ฌ์ ๋ ์์ธ๋ฅผ ์ผ์ผํค๊ณ ์ถ๋ค๋ฉด tsconfig.json ํ์ผ์์ noImplicitAny ํ๋๊ทธ๋ฅผ ํ์ฑํํ์.
3.2.2 unknown
ํ์ ์ ๋ฏธ๋ฆฌ ์ ์ ์๋ ์ด๋ค ๊ฐ์ด ์์ ๋ any ๋์ unknown์ ์ฌ์ฉํ์. any์ฒ๋ผ unknown๋ ๋ชจ๋ ๊ฐ์ ๋ํํ์ง๋ง, unknown์ ํ์ ์ ๊ฒ์ฌํด ์ ์ (refine)ํ๊ธฐ ์ ๊น์ง๋ ํ์ ์คํฌ๋ฆฝํธ๊ฐ unknown ํ์ ์ ๊ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ๊ฐ์ ํ๋ค.
unknown์ ๋น๊ต ์ฐ์ฐ(==, ===, ||, &&, ?)๊ณผ ๋ฐ์ (!) ์ฐ์ฐ์ ์ง์ํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์ typeof, instanceof ์ฐ์ฐ์๋ก ์ ์ ํ ์ ์๋ค.
let a: unknown = 30 // unknown
let b = a === 123 // boolean
let c = a + 10 // ์๋ฌ TS2571: ๊ฐ์ฒด์ ํ์
์ด 'unknown'์
if (typeof a === 'number') {
let d = a + 10 // number
}
- ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๋ฌด์ธ๊ฐ์ ํ์ ์ unknown์ด๋ผ๊ณ ์ถ๋ก ํ๋ ์ํฉ์ ์๋ค. unknown ํ์ ์ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก ์ค์ ํด์ผ ํ๋ค(a).
- unknown ํ์ ์ด ์๋ ๊ฐ๊ณผ unknown ํ์ ์ธ ๊ฐ์ ๋น๊ตํ ์ ์๋ค(b).
- ํ์ง๋ง unknown ๊ฐ์ด ํน์ ํ์ ์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ ํด๋น ํ์ ์์ ์ง์ํ๋ ๋์์ ์ํํ ์๋ ์๋ค(c). ๋จผ์ ํ์ ์คํฌ๋ฆฝํธ์๊ฒ ํด๋น ๊ฐ์ด ํน์ ํ์ ์์ ์ฆ๋ช ํด์ผ ํ๋ค(d).
3.2.3 boolean
boolean ํ์ ์ ๋น๊ต ์ฐ์ฐ(==, ===, ||, &&, ?)๊ณผ ๋ฐ์ (!) ์ฐ์ฐ์ ์ง์ํ๋ค.
let a = true // boolean
var b = false // boolean
const c = true // true
let d: boolean = true // boolean
let e: true = true // true
let f: true = false // error: 'false' ํ์
์ 'true' ํ์
์ ํ ๋นํ ์ ์์
- ์ด๋ค ๊ฐ์ด boolean์ธ์ง ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์ถ๋ก ํ๊ฒ ํ๋ค(a, b).
- ์ด๋ค ๊ฐ์ด ํน์ boolean์ธ์ง ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์ถ๋ก ํ๊ฒ ํ๋ค(c).
- ๊ฐ์ด boolean์์ ๋ช ์์ ์ผ๋ก ํ์ ์คํฌ๋ฆฝํธ์ ์๋ฆฐ๋ค(d).
- ๊ฐ์ด ํน์ boolean์์ ๋ช ์์ ์ผ๋ก ํ์ ์คํฌ๋ฆฝํธ์ ์๋ฆฐ๋ค(e, f).
์ค์ ํ๋ก๊ทธ๋๋ฐ์์๋ ๋ณดํต ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ์ธ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๊ฑฐ์ ์ฌ์ฉํ ์ผ์ด ์๋ค.
๋ ๋ฒ์งธ์ ๋ค ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ง๊ด์ ์ด์ง๋ง ์ด๋ฐ ๊ธฐ๋ฅ์ ์ง์ํ๋ ์ธ์ด๊ฐ ๊ฑฐ์ ์๋ค. ์ด ์์ ๋ ๊ฐ์ ํ์ ์ผ๋ก ์ฌ์ฉํ๋ฏ๋ก e์ f์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ boolean ์ฐจ๋น์ด ๊ฐ์ง ์ ์๋ ๊ฐ ์ค ํน์ ํ ํ๋์ ๊ฐ์ผ๋ก ํ์ ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํ์ ๋ฆฌํฐ๋ด์ด๋ผ ๋ถ๋ฅธ๋ค.
ํ์ ๋ฆฌํฐ๋ด(type literal)
์ค์ง ํ๋์ ๊ฐ์ ๋ํ๋ด๋ ํ์
๋ค ๋ฒ์จฐ ์ค์์ ๋ณ์๋ฅผ ๋ช ์์ ์ผ๋ก ํ์ ๋ฆฌํฐ๋ด๋ก ์ค์ ํ์ผ๋ฉฐ ์ธ ๋ฒ์งธ ์ค์์๋ var๋ let ๋์ const๋ฅผ ์ฌ์ํ์ฌ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์๋์ผ๋ก ๋ณ์์ ํ์ ์ ๋ฆฌํฐ๋ด๋ก ์ถ๋ก ํ๋ค.(const๋ฅผ ์ฌ์ฉํ์ผ๋ฏ๋ก ํ์ ์คํฌ๋ฆฝํธ๋ ๊ทธ ๋ณ์์ ๊ฐ์ด ์ ๋ ๋ณํ์ง ์์ ๊ฒ์์ ์๊ฒ ๋์ด ๊ฐ์ฅ ์ข์ ํ์ ์ผ๋ก ์ถ๋ก ํ๊ฑฐ์) ํ์ ๋ฆฌํฐ๋ด์ ๋ชจ๋ ๊ณณ์์ ์ผ์ด๋ ์ ์๋ ์ค์๋ฅผ ๋ฐฉ์งํด ์์ ์ฑ์ ์ถ๊ฐ๋ก ํ๋ณดํด์ฃผ๋ ๊ฐ๋ ฅํ ์ธ์ด ๊ธฐ๋ฅ์ด๋ค.
3.2.4 number
number ํ์ ์ ๋ชจ๋ ์ซ์์ ์งํฉ์ด๋ค. ๋ง์ (+), ๋บ์ (-), ๋ชจ๋๋ก(%), ๋น๊ต(<) ๋ฑ์ ์ซ์ ๊ด๋ จ ์ฐ์ฐ์ ์ํํ ์ ์๋ค.
let a = 1234 // number
var b = infinity * 0.10 // number
const c = 5678 // 5678
let d = a < b // boolean
let e: number = 100 // number
let f: 26.218 = 26.218 // 26.218
let g: 26.218 = 10 // error: '10' ํ์
์ '26.218' ํ์
์ ํ ๋นํ ์ ์์
- ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๊ฐ์ด number์์ ์ถ๋ก ํ๊ฒ ํ๋ค(a, b). โ ๊ฐ๋ฐ์ ์ฃผ๋ก ์ฌ์ฉ
- const๋ฅผ ์ด์ฉํด ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๊ฐ์ด ํน์ number์์ ์ถ๋ก ํ๊ฒ ํ๋ค(c). โ ๊ฐ๋ฐ์ ๊ฐ๋ ์ฌ์ฉ
- ๊ฐ์ด number์์ ๋ช ์์ ์ผ๋ก ํ์ ์คํฌ๋ฆฝํธ์ ์๋ฆฐ๋ค(e). โ ๊ฑฐ์ ์ฌ์ฉ X
- ํ์ ์คํฌ๋ฆฝํธ์ ๊ฐ์ด ํน์ number์์ ๋ช ์์ ์ผ๋ก ์๋ฆฐ๋ค(f, g). โ ๊ฐ๋ฐ์ ๊ฐ๋ ์ฌ์ฉ
3.2.5 bigint
bigint๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ ์คํฌ๋ฆฝํธ์ ์๋ก ์ถ๊ฐ๋ ํ์ ์ผ๋ก, ์ด๋ฅผ ์ด์ฉํ๋ฉด ๋ผ์ด๋ฉ ๊ด๋ จ ์๋ฌ ๊ฑฑ์ ์์ด ํฐ ์ ์๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.(number๋ 2โตยณ๊น์ง์ ์ ์๋ฅผ ํํํ ์ ์์ง๋ง bigint๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ณด๋ค ํฐ ์๋ ํํํ ์ ์์) ๋ํ bigint ๋ฆฌํฐ๋ด์ ๋ฐ๋์ ์ ์์ฌ์ผ ํ๋ค.
3.2.6 string
stirng์ ๋ชจ๋ ๋ฌธ์์ด์ ์งํฉ์ผ๋ก ์ฐ๊ฒฐ(+), ์ฌ๋ผ์ด์ค(.slice)๋ฑ์ ์ฐ์ฐ์ ์ํํ ์ ์๋ค. boolean์ด๋ number ์ฒ๋ผ string ํ์ ๋ ๋ค ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ ์ธํ ์ ์์ผ๋ฉฐ ๊ฐ๋ฅํ๋ค๋ฉด ํ์ ์คํฌ๋ฆฝํธ๊ฐ string ํ์ ์ ์ถ๋ก ํ๋๋ก ๋๋ ๊ฒ์ด ์ข๋ค.
3.2.7 symbol
symbol์ ES2015์ ์๋ก ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ด๋ค. ์ค๋ฌด์์๋ ์์ฃผ ์ฌ์ฉํ์ง ์๋ ํธ์ด๋ฉฐ ๊ฐ์ฒด์ ๋งต์์ ๋ฌธ์์ด ํค๋ฅผ ๋์ ํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค. ์ฌ๋ฒํค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋๋ค์ด ์ ์๋ ค์ง ํค๋ง ์ฌ์ฉํ๋๋ก ๊ฐ์ ํ ์ ์์ผ๋ฏ๋ก ํค๋ฅผ ์๋ชป ์ค์ ํ๋ ์ค์๋ฅผ ๋ฐฉ์งํ๋ค.
let a = Symbol('a') // symbol
let b:symbol = Symbol('b') // symbol
let c = a === b // boolean
let d = a + 'x' // error: '+'์ฐ์ฐ์ 'symbol'ํ์
์ ์ ์ฉํ ์ ์์
์๋ฐ์คํฌ๋ฆฝํธ์์ Symbol('a')๋ ์ฃผ์ด์ง ์ด๋ฆ์ผ๋ก ์๋ก์ด symbol์ ๋ง๋ ๋ค๋ ์๋ฏธ๋ค. ๋ง๋ค์ด์ง symbol์ ๊ณ ์ (unique)ํ์ฌ ๋ค๋ฅธ symbol๊ณผ == ๋๋ ===๋ก ๋น๊ตํ์ ๋ ๊ฐ์ง ์๋ค๊ณ ํ๋จ๋๋ค.(์ฌ์ง์ด ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ค๋ฅธ symbol์ ๋ง๋ค์ด๋ ๋ง์ฐฌ๊ฐ์ง์) symbol๋ symbol ํ์ ์ผ๋ก ์ถ๋ก ๋๊ฑฐ๋ ๋ช ์์ ์ผ๋ก unique symbol์ ์ ์ํ ์ ์๋ค. ์๋ ์์๋ unique symbol์ ๋ง๋๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด๋ค.
const e = Symbol('e') // typeof e
const f: unique symbol = Symbol('f') // typeof f
let g: unique symbol = Symbol('f') // 'unique symbol' ํ์
์ ๋ฐ๋์ 'const'์ฌ์ผ ํจ
let h = e === e // boolean
let i = e === f // error: 'unique symbol'ํ์
์ ์๋ก ๊ฒน์น๋ ์ผ์ด ์์ผ๋ฏ๋ก ์ด ๋น๊ต๋ฌธ์ ๊ฒฐ๊ณผ๋ ํญ์ 'false'
- ์ symbol์ ์ ์ธํ๊ณ const ๋ณ์์ ํ ๋นํ๋ฉด ํ์ ์คํฌ๋ฆฝํธ๊ฐ unique symbolํ์ ์ผ๋ก ์ถ๋ก ํ๋ค. ์ฝ๋ ํธ์ง๊ธฐ์์๋ unique symbol์ด ์๋๋ผ 'typeof ๋ณ์๋ช ' ํํ๋ก ๋ณด์ฌ์ค ๊ฒ์ด๋ค.
- const ๋ณ์์ ํ์ ์ unique symbol๋ก ๋ช ์์ ์ผ๋ก ์ ์ํ ์ ์๋ค.
- ํ์ ์คํฌ๋ฆฝํธ๋ ์ปดํ์ผ ํ์์ unique symbol์ด ๋ค๋ฅธ unique symbol๊ณผ ๊ฐ์ง ์์ ๊ฒ์ด๋ผ๋ ์ฌ์ค์ ์ ์ ์๋ค.
unique symbol๋ ๊ฒฐ๊ตญ 1, true, "literal" ๋ฑ ๋ค๋ฅธ ๋ฆฌํฐ๋ด ํ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํน์ symbol์ ๋ํ๋ด๋ ํ์ ์ด๋ค.
3.2.8 ๊ฐ์ฒด
ํ์ ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด(object) ํ์ ์ ๊ฐ์ฒด์ ํํ(shape)์ ์ ์ํ๋ค. ํ์ ์คํฌ๋ฆฝํธ ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ตฌ์กฐ ๊ธฐ๋ฐ ํ์ (structural type)์ ๊ฐ๋๋ก ์ค๊ณ๋์ด ์๋ค.
๊ตฌ์กฐ ๊ธฐ๋ฐ ํ์ ํ
๊ตฌ์กฐ ๊ธฐ๋ฐ ํ์ ํ์์๋ ๊ฐ์ฒด์ ์ด๋ฆ์ ์๊ด์์ด ๊ฐ์ฒด๊ฐ ์ด๋ค ํ๋กํผํฐ๋ฅผ ๊ฐ๊ณ ์๋์ง๋ฅผ ๋ฐ์ง๋ค.(์ด๋ฆ ๊ธฐ๋ฐ์์๋ ์ด๋ฆ์ ๋ฐ์ง) ์ผ๋ถ ์ธ์ด์์๋ ๋ ํ์ดํ(duck typing)์ด๋ผ๊ณ ํ๋ค.
ํ์ ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด๋ฅผ ์์ ํ๋ ๋ฐ ํ์ ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
1) object ํ์ . ์ด๋ค ํ๋๋ฅผ ๊ฐ์ง๊ณ ์๋์ง๋ ๊ด์ฌ์ด ์๊ณ , ๊ทธ์ ๊ฐ์ฒด๊ฐ ํ์ํ ๋ ์ฌ์ฉ
let a: object = {
b: 'x'
}
a.b // error: 'b' ํ๋กํผํฐ๋ 'object'์ ์กด์ฌํ์ง ์์
object๋ any๋ณด๋ค ์กฐ๊ธ ๋ ์ข์ ํ์ ์ผ๋ก object๋ ์์ ํ๋ ๊ฐ์ ๊ดํ ์ ๋ณด๋ฅผ ๊ฑฐ์ ์๋ ค์ฃผ์ง ์์ผ๋ฉฐ, ๊ฐ ์์ฒด๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ผ๊ณ (๊ทธ๋ฆฌ๊ณ null์ด ์๋๋ผ๊ณ ) ๋งํด์ค ๋ฟ์ด๋ค.
2) ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋๋ ํํ๋ผ ๋ถ๋ฆฌ๋ ํ๊ธฐ๋ฒ({a: string}). ๊ฐ์ฒด๊ฐ ์ด๋ค ํ๋๋ฅผ ํฌํจํ ์ ์๋์ง ์๊ณ ์๊ฑฐ๋ ๊ฐ์ฒด์ ๋ชจ๋ ๊ฐ์ด ๊ฐ์ ํ์
์ ๊ฐ์ง ๋ ์ฌ์ฉ
ํ์ ์คํฌ๋ฆฝํธ๊ฐ c์ ํํ๋ฅผ ์ถ๋ก ํ๊ฒ ํ๊ฑฐ๋ ์ค๊ดํธ({}) ์์์ ๋ช ์์ ์ผ๋ก ํ์ ์ ๋ฌ์ฌํ ์ ์๋ค.
// ํํ ์ถ๋ก
let a = {
b: 'x'
} // {b: string}
a.b // string
let b = {
c: {
d: 'f'
}
} // {c: {d: string}}
// {}์์ ๋ช
์์ ์ผ๋ก ํ์
๋ฌ์ฌ
let a: {b: number} = {
b: 12
} // {b: number}
๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฌธ๋ฒ์ '์ด๋ฐ ํํ์ ๋ฌผ๊ฑด์ด ์์ด'๋ผ๊ณ ๋งํ๋ค. ์ด ๋ฌผ๊ฑด์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋๋ ํด๋์ค ์ผ ์ ์๋ค.
let c: {
name: string
} = {
name: 'jaejae'
}
class Person{
constructor{
public name: string // public์ this.name = name์ ๋จ์ถํ ๊ฒ
} { }
}
c = new Person('jae') // OK
{name:string} ์ ๊ฐ์ฒด์ ํํ๋ฅผ ๋ฌ์ฌํ๋ฉฐ ๊ฐ์ฒด ๋ฆฌํฐ๋ด๊ณผ ํด๋์ค ์ธ์คํด์ค ๋ชจ๋ ์ด ํํ๋ฅผ ๋ง์กฑํ๋ฏ๋ก ํ์ ์คํฌ๋ฆฝํธ๋ Person์ c๋ก ํ ๋นํ๋ ๋์์ ํ์ฉํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํ์ ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด ํ๋กํผํฐ์ ์๊ฒฉํ ํธ์ธ๋ฐ, ์๋ฅผ ๋ค์ด ๊ฐ์ฒด์ number ํ์ ์ b๋ผ๋ ํ๋กํผํฐ๊ฐ ์์ด์ผ ํ๋ค๊ณ ์ ์ํ๋ฉด ํ์ ์คํฌ๋ฆฝํธ๋ b๋ฅผ ๊ธฐ๋ํ๊ณ b๊ฐ ์๊ฑฐ๋ ๋ค๋ฅธ ์ถ๊ฐ ํ๋กํผํฐ๊ฐ ์์ผ๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค. ?๋ ์ธ๋ฑ์ค ์๊ทธ๋์ฒ๋ฅผ ์ฌ์ฉํด ์ด๋ค ํ๋กํผํฐ๋ ์ ํํ์ด๊ณ ์์ ์ ์๋ ํ๋กํผํฐ๊ฐ ์ถ๊ฐ๋ ์ ์๋ค๊ณ ํ์ ์คํฌ๋ฆฝํธ์ ์๋ ค์ค ์ ์๋ค.
์ธ๋ฑ์ค ์๊ทธ๋์ฒ(index signature)
[key: T]: U ๊ฐ์ ๋ฌธ๋ฒ์ ์ธ๋ฑ์ค ์๊ทธ๋์ฒ๋ผ ๋ถ๋ฅด๋ฉฐ ํ์ ์คํฌ๋ฆฝ์ ์ด๋ค ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ํค๋ฅผ ๊ฐ์ง ์ ์์์ ์๋ ค์ค๋ค. "์ด ๊ฐ์ฒด์์ ๋ชจ๋ T ํ์ ์ ํค๋ U ํ์ ์ ๊ฐ๋๋ค"๋ผ๊ณ ํด์ํ ์ ์๋ค. ์ธ๋ฑ์ค ์๊ทธ๋์ฒ์ ํค(T)๋ ๋ฐ๋์ number๋ stirng ํ์ ์ ํ ๋นํ ์ ์๋ ํ์ ์ด์ด์ผ ํ๋ค. ์ธ๋ฑ์ค ์๊ทธ๋์ฒ์ ํค ์ด๋ฆ์ ์ํ๋ ์ด๋ฆ์ ๊ฐ์ ธ๋ค ๋ฐ๊ฟ๋ ๋๋ค(key๊ฐ ์๋์ด๋ ๋๋ค๋ ๋ป)
let a: {
b: number
c?: string // ์ ํํ(?)
[key: number]: boolean // ์์ ์ ์๋ ํ๋กํฐํผ ์ถ๊ฐ๋ ์ ์์
}
๊ฐ์ฒด ํ์
์ ์ ์ํ ๋ ์ ํํ(?)๋ง ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋ค. ํ์ํ๋ค๋ฉด readonly ํ์ ์๋ฅผ ์ด์ฉํด ํน์ ํ๋๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ ์ํ ์ ์๋ค.(์ ์ํ ํ๋์ ์ด๊น์พ์ ํ ๋นํ ๋ค์์๋ ๊ทธ ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ค. ๊ฐ์ฒด ํ๋กํผํฐ์ const๋ฅผ ์ ์ฉํ ๋ฏํ ํจ๊ณผ)
let user: {
readonly name: string
} = {
name = 'jaejae'
}
user.name // string
user.name =
'jaejae like apple' // error: 'name'์ ์ฝ๊ธฐ ์ ์ฉ ํ๋กํผํฐ์ด๋ฏ๋ก ํ ๋นํ ์ ์์
3) ๋น ๊ฐ์ฒด ๋ฆฌํฐ๋ด ํ๊ธฐ๋ฒ({}).์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์
null๊ณผ undefined๋ฅผ ์ ์ธํ ๋ชจ๋ ํ์ ์ ๋น ๊ฐ์ฒด ํ์ ์ ํ ๋นํ ์ ์์ผ๋, ์ด๋ ์ฌ์ฉํ๊ธฐ ๊น๋ค๋กญ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ํ ๋น ๊ฐ์ฒด๋ฅผ ํผํ๋ ๊ฒ์ด ์ข๋ค
4) Object ํ์
. ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์
3.2.9 ํด์ ์๊ฐ: ํ์
๋ณ์นญ, ์ ๋์จ, ์ธํฐ์น์
๊ฐ์ด ์์ผ๋ฉด ๊ฐ์ ํ์ ์ด ๋ฌด์์ธ์ง์ ๋ฐ๋ผ ์ํํ ์ ์๋ ์ฐ์ฐ์ด ๋ฌ๋ผ์ง๋ค. ์๋ฅผ ๋ค์ด +๋ก ๋ ์ซ์๋ฅผ ๋ํ๊ฑฐ๋ .yoUpperCase๋ก ๋ฌธ์์ด์ ๋๋ฌธ์๋ก ๋ง๋ค ์ ์๋ค. ๊ฐ๋ฟ๋ง ์๋๋ผ ํ์ ์๋ ์ด๋ค ๋์์ ์ํํ ์ ์๋ค
ํ์ ๋ณ์นญ
type Age = number
type Person = {
name: string
age: Age
}
let age = 55
let driver: Person = {
name: 'jaejae',
age: age
}
(let, const, var๋ก) ๋ณ์๋ฅผ ์ ์ธํด์ ๊ฐ ๋์ ๋ณ์๋ก ์นญํ๋ฏ์ด ํ์ ๋ณ์นญ์ผ๋ก ํ์ ์ ๊ฐ๋ฅดํฌ ์ ์๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ๋ณ์นญ์ ์ถ๋ก ํ์ง๋ ์์ผ๋ฏ๋ก ๋ฐ๋์ ๋ณ์นญ์ ํ์ ์ ๋ช ์์ ์ผ๋ก ์ ์ํด์ผ ํ๋ค. ํ์ ๋ณ์นญ์ ํ๋ก๊ทธ๋จ์ ๋ ผ๋ฆฌ์ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๋ณ์นญ์ด ๊ฐ๋ฆฌํค๋ ํ์ ์ผ๋ก ๋์นํ ์ ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์ ์ ์ธ(let, const, var)๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋์ ํ์ ์ ๋ ๋ฒ ์ ์ํ ์๋ ์๋ค.
let๊ณผ const์ฒ๋ผ ํ์ ๋ณ์นญ๋ ๋ธ๋ก ์์ญ์ ์ ์ฉ๋๋ค. ๋ชจ๋ ๋ธ๋ก๊ณผ ํจ์๋ ์์ ๋ง์ ์์ญ์ ๊ฐ์ง๋ฏ๋ก ๋ด๋ถ์ ์ ์ํ ํ์ ๋ณ์นญ์ด ์ธ๋ถ์ ์ ์๋ฅผ ๋ฎ์ด์ด๋ค(shadowing).
ํ์ ๋ณ์นญ์ ๋ณต์กํ ํ์ ์ ๋ฐ๋ณตํ์ง ์๊ฒ ํด์ฃผ๋ฉฐ ๋ณ์๊ฐ ์ด๋ค ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋์๋์ง ์ฝ๊ฒ ์ดํดํ ์ ์๊ฒ ๋์์ค๋ค. ๊ฐ์ ๋ณ์๋ก ํ ๋นํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ์ ๋ณ์นญ์ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค.
์ ๋์จ๊ณผ ์ธํฐ์น์ ํ์
A, B๋ผ๋ ๋ ์ฌ๋ฌผ์ด ์์ ๋ ์ด๋ฅผ ์ ๋์จ(ํฉ์งํฉ)ํ๋ฉด ๋์ ํฉ์น ๊ฒฐ๊ณผ๊ณผ ๋์ค๋ฉฐ ์ธํฐ์น์ (๊ต์งํฉ)ํ๋ฉด ๋์ ๊ณตํต ๋ถ๋ถ์ด ๊ฒฐ๊ณผ๋ก ๋์จ๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ํ์ ์ ์ ์ฉํ ์ ์๋ ํน๋ณํ ์ฐ์ฐ์์ธ ์ ๋์จ(|)๊ณผ ์ธํฐ์น์ (&)์ ์ ๊ณตํ๋ค. ํ์ ์ ์งํฉ๊ณผ ๋น์ทํ๋ฏ๋ก ์งํฉ์ฒ๋ผ ์ฐ์ฐ์ ์ํํ ์ ์๋ค. ์ค์ ์์๋ ๋๊ฐ ์ธํฐ์น์ ๋ณด๋ค ์ ๋์จ์ ์์ฃผ ์ฌ์ฉํ๋ค.
3.2.10 ๋ฐฐ์ด
์๋ฐ์คํฌ๋ฆฝํธ์ฒ๋ผ ํ์ ์คํฌ๋ฆฝํธ ๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ(concatenation), ํธ์(pushing), ๊ฒ์(searching), ์ฌ๋ผ์ด์ค(slicing) ๋ฑ์ ์ง์ํ๋ ํน๋ณํ ๊ฐ์ฒด๋ค. ๋ํ T[]์ Array<T>๋ผ๋ ๋ ๊ฐ์ง ๋ฐฐ์ด ๋ฌธ๋ฒ์ ์ง์ํ๋ค. ์ฑ๋ฅ, ์๋ฏธ์ ๋ ํํ์ ๊ฐ์ผ๋ฏ๋ก ์์ ์ ์ทจํฅ๋๋ก ์ํ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋๊ฐ๋ ๋ฐฐ์ด์ ๋ํ(homogeneous)์ผ๋ก ๋ง๋ ๋ค. ์ฆ, ํ ๋ฐฐ์ด์ ์ฌ๊ณผ, ์ค๋ ์ง, ์ซ์๋ฅผ ํจ๊ป ์ ์ฅํ์ง ์๊ณ ๋ฐฐ์ด์ ๋ชจ๋ ํญ๋ชฉ์ด ๊ฐ์ ํ์ ์ ๊ฐ๋๋ก ์ค๊ณํ๋ ค ๋ ธ๋ ฅํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ์ ์คํฌ๋ฆฝํธ์ ๋ฐฐ์ด๊ณผ ๊ด๋ จํ ์์ ์ด ์์ ํ์ง ์ฆ๋ช ํด์ผ ํ๋ฏ๋ก ์ถ๊ฐ ์์ ์ ํด์ผํ๋ค.
3.2.11 ํํ
ํํ(tuple)์ ๋ฐฐ์ด์ ์๋ธํ์ ์ด๋ค. ํํ์ ๊ธธ์ด๊ฐ ๊ณ ์ ๋์๊ณ , ๊ฐ ์ธ๋ฑ์ค์ ํ์ ์ด ์๋ ค์ง ๋ฐฐ์ด์ ์ผ์ข ์ด๋ค. ๋ค๋ฅธ ํ์ ๊ณผ ๋ฌ๋ฆฌ ํํ์ ์ ์ธํ ๋ ํ์ ์ ๋ช ์ํด์ผ ํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐฐ์ด๊ณผ ํํ์ ๊ฐ์ ๋ฌธ๋ฒ(๋๊ดํธ)์ ์ฌ์ฉํ๋๋ฐ ํ์ ์คํฌ๋ฆฝํธ์์๋ ๋๊ดํธ๋ฅผ ๋ฐฐ์ด ํ์ ์ผ๋ก ์ถ๋ก ํ๊ธฐ ๋๋ฌธ์ด๋ค.
let a: [string, string, number] = ['apple', 'orange', 2]
a = ['red', 'yellow', 'blue', 123] // error: 'string'์ 'number'ํ์
์ ํ ๋นํ ์ ์์
ํํ์ ์ ํํ ์์๋ ์ง์ํ๋ค. ๊ฐ์ฒด ํ์ ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ?๋ '์ ํํ'์ ๋ปํ๋ค. ๋ํ ํํ์ด ์ต์ ๊ธธ์ด๋ฅผ ๊ฐ๋๋ก ์ง์ ํ ๋๋ ๋๋จธ์ง ์์(...)๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
// ์ ํํ(?)
let number: [number, number?]] = [
[3.75],
[8.25, 7.70],
[10.50]
]
// ๋๋จธ์ง ์์(...)
let name: [string, ...stirng[]] = ['a', 'b', 'c', 'd']
ํํ์ ์ดํ(heterogeneous) ๋ฐฐ์ด์ ์์ ํ๊ฒ ๊ด๋ฆฌํ ๋ฟ ์๋๋ผ ๋ฐฐ์ด ํ์ ์ ๊ธธ์ด๋ ์กฐ์ ํ๋ค. ๋ฐ๋ผ์ ๋ฐฐ์ด๋ณด๋ค ํํ ์ฌ์ฉ์ ๊ถ์ฅ!
์ฝ๊ธฐ ์ ์ฉ ๋ฐฐ์ด๊ณผ ํํ
ํ์ ์คํฌ๋ฆฝํธ๋ readonly ๋ฐฐ์ด ํ์ ์ ๊ธฐ๋ณธ์ผ๋ก ์ง์ฐ๋ํ๋ฏ๋ก ์ด๋ฅผ ์ด์ฉํด ๋ถ๋ณ ๋ฐฐ์ด์ ๋ง๋ค ์ ์๋ค. ์ฝ๊ธฐ ์ ์ฉ ๋ฐฐ์ด์ ์ผ๋ฐ ๋ฐฐ์ด๊ณผ ๊ฐ์ง๋ง ๋ด์ฉ์ ๊ฐฑ์ ํ ์ ์๋ค๋ ์ ๋ง ๋ค๋ฅด๋ค. ์ฝ๊ธฐ ์ ์ฉ ๋ฐฐ์ด์ ๋ช ์์ ํ์ ์ด๋ ธํ ์ด์ ์ผ๋ก ๋ง๋ค ์ ์๋ค. ์ฝ๊ธฐ ์ ์ฉ ๋ฐฐ์ด์ ๊ฐฑ์ ํ๋ ค๋ฉด .push, .splice์ฒ๋ผ ๋ด์ฉ์ ๋ฐ๊พธ๋ ๋์ ๋์ .concat, .slice๊ฐ์ด ๋ด์ฉ์ ๋ฐ๊พธ์ง ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
์ฝ๊ธฐ ์ ์ฉ ๋ฐฐ์ด์ ๊ฒฐ๊ตญ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด๋ก ๊ตฌํํ ๊ฒ์ผ๋ก ์ฆ, ์คํ๋ ๋(...)๋ .slice ๋ฑ์ผ๋ก ๋ฐฐ์ด์ ์กฐ๊ธ๋ง ๋ฐ๊ฟ๋ ์ฐ์ ์๋ ๋ฐฐ์ด์ ๋ณต์ฌํด์ผ ํ๋ฏ๋ก, ์ฃผ์ํ์ง ์์ผ๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ด ๋๋ ค์ง ์ ์๋ค. ์์ ๋ฐฐ์ด์์๋ ์ด๋ฐ ์ค๋ฒํค๋๊ฐ ์ฌ์ํด๋ณด์ผ ์ ์์ง๋ง ํฐ ๋ฐฐ์ด์์๋ ํฐ ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
3.2.12 null, undefinded, void, never
ํ์ ์คํฌ๋ฆฝํธ์์ undefined ๊ฐ์ ํ์ ์ ์ค์ง undefined๋ฟ์ด๊ณ null ๊ฐ์ ํ์ ์ null ๋ฟ์ด๋ผ๋ ์ ์์ ํน๋ณํ ํ์ ์ด๋ค. undefined์ null์ ๊ฐ์ ํผ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ undefined๋ ์์ง ์ ์ํ์ง ์์์์ ์๋ฏธํ๋ ๋ฐ๋ฉด null์ ๊ฐ์ด ์๋ค๋ ์๋ฏธ๋ค.
ํ์ ์คํฌ๋ฆฝํธ๋ null๊ณผ undefined ์ธ์๋ void์ never ํ์ ๋ ์ ๊ณตํ๋ค. void๋ ๋ช ์์ ์ผ๋ก ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋ ํจ์์ ๋ฐํ ํ์ (์๋ฅผ ๋ค๋ฉด console.log)์ ๊ฐ๋ฆฌํค๋ฉฐ never๋ ์ ๋ ๋ฐํํ์ง ์๋(์์ธ๋ฅผ ๋์ง๊ฑฐ๋ ์์ํ ์คํ๋๋) ํจ์ ํ์ ์ ๊ฐ๋ฆฌํจ๋ค.
// number ๋๋ null์ ๋ฐํํ๋ ํจ์
function a(x: number) {
if (x < 10) {
return x
}
return null
}
// undefined๋ฅผ ๋ฐํํ๋ ํจ์
function b() {
return undefined
}
// void๋ฅผ ๋ฐํํ๋ ํจ์
function c() {
let a = 2 + 2
let b = a * a
}
// never๋ฅผ ๋ฐํํ๋ ํจ์
function d() {
throw TypedError('I always error')
}
// never๋ฅผ ๋ฐํํ๋ ๋ ๋ค๋ฅธ ํจ์
function e() {
while(true) {
doSomething
}
}
unknown์ด ๋ชจ๋ ํ์ ์ ์์ ํ์ ์ด๋ผ๋ฉด never์ ๋ชจ๋ ํ์ ์ ์๋ธํ์ ์ด๋ค. ์ฆ, ๋ชจ๋ ํ์ ์ never๋ฅผ ํ ๋นํ ์ ์์ผ๋ฉฐ never ๊ฐ์ ์ด๋์๋ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.

3.2.13 ์ด๊ฑฐํ
์ด๊ฑฐํ(enum)์ ํด๋น ํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฐ์ ์ด๊ฑฐํ๋ ๊ธฐ๋ฒ์ด๋ค. ์ด๊ฑฐํ์ ํค๋ฅผ ๊ฐ์ ํ ๋นํ๋, ์์๊ฐ ์๋ ์๋ฃ๊ตฌ์กฐ๋ค.ํค๋ ์ปดํ์ผ ํ์์ ๊ณ ์ ๋ ๊ฐ์ฒด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค. ๋ฐ๋ผ์ ํ์ ์คํฌ๋ฆฝํธ๋ ํค์ ์ ๊ทผํ ๋ ์ฃผ์ด์ง ํค๊ฐ ์ค์ ์กด์ฌํ๋์ง ํ์ธํ ์ ์๋ค. ๋ฌธ์์ด์์ ๋ฌธ์์ด๋ก ๋งคํํ๊ฑฐ๋ ๋ฌธ์์ด์์ ์ซ์๋ก ๋งคํํ๋ ์ด๊ฑฐํ, ์ด๋ ๊ฒ ๋ ๊ฐ์ง๊ฐ ์๋ค. ๋ค์์ ์ด๊ฑฐํ์ ์์์ด๋ค.
enum Language {
English,
Spanish,
Russian
}
ํ์ ์คํฌ๋ฆฝํธ๋ ์๋์ผ๋ก ์ด๊ฑฐํ์ ๊ฐ ๋ฉค๋ฒ์ ์ ์ ํ ์ซ์๋ฅผ ์ถ๋ก ํด ํ ๋นํ์ง๋ง, ๊ฐ์ ๋ช ์์ ์ผ๋ก ์ค์ ํ ์๋ ์๋ค.
enum Language {
English = 0,
Spanish = 1,
Russian = 2
}
(๋ณดํต์ ๊ฐ์ฒด์์ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋์ฒ๋ผ) ์ ๋๋ ๊ดํธ ํ๊ธฐ๋ฒ์ผ๋ก ์ด๊ฑฐํ ๊ฐ์ ์ ๊ทผํ ์ ์๋ค
let myFirstLanguage = Language.Russian // Language
let mySecondLanguage = Language['English'] // Language
์ด๊ฑฐํ์ ์ฌ๋ฌ ๊ฐ๋ก ๋๋ ์ ์ํ ๋ค์ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์ด๋ค์ ํฉ์น๋๋ก ํ ์๋ ์๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ์ฌ๋ฌ ์ด๊ฑฐํ ์ ์ ์ค ํ ๊ฐ์ง ๊ฐ๋ง ์ถ๋ก ํ ์ ์์ผ๋ฏ๋ก ์ด๊ฑฐํ์ ๋ถํ ํ ๋ ์ฃผ์ํด์ผ ํ๋ฉฐ, ๋ค์ ์์ฒ๋ผ ๊ฐ ์ด๊ฑฐํ ๋ฉค๋ฒ์ ๋ช ์์ ์ผ๋ก ๊ฐ์ ํ ๋นํ๋ ์ต๊ด์ ๊ธฐ๋ฅด๋ ๊ฒ์ด ์ข๋ค.
enum Language {
English = 0,
Spanish = 1
}
enum Language {
Russian = 2
}
๊ณ์ฐ๋ ๊ฐ์ ์ฌ์ฉํ ์๋ ์์ผ๋ฏ๋ก ๋ชจ๋ ๊ฐ์ ์ ์ํ ํ์๋ ์๋ค.(๋น ์ง ๊ฐ์ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์ถ๋ก ํจ)
enum Language {
English = 100,
Spanish = 200 + 300,
Russian // ํ์
์คํฌ๋ฆฝํธ๊ฐ 500 ๋ค์ ์ซ์์ธ 501๋ก ์ถ๋ก
}
์ด๊ฑฐํ์ ๋ฌธ์์ด ๊ฐ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ฌธ์์ด๊ณผ ์ซ์ ๊ฐ์ ํผํฉํ ์ ์๋ค. ๋ํ ํ์ ์คํฌ๋ฆฝํธ์์๋ ๊ฐ์ด๋ ํค๋ก ์ด๊ฑฐํ์ ์ ๊ทผํ ์ ์๋๋ก ํ์ฉํ์ง๋ง ์ด๋ ๋ถ์์ ํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ ๋ ์์ ํ ์ด๊ฑฐํ ํ์ ์ธ const enum์ ์ด์ฉํ๋ค.
const enum์ ์ญ๋ฐฉํฅ ์ฐพ๊ธฐ๋ฅผ ์ง์ํ์ง ์์ผ๋ฏ๋ก ์ด๊ฑฐํ์ ๋์์ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ๋น์ทํด์ง๋ค. ๋ํ const enum์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฌด ์๋ฐ์คํฌ๋ฆฝํธ๋ ์์ฑํ์ง ์์ผ๋ฉฐ ๊ทธ ๋์ ํ์ํ ๊ณณ์ ์ด๊ฑฐํ ๋ฉค๋ฒ์ ๊ฐ์ ์ฑ์ ๋ฃ๋๋ค.
3.3 ๋ง์น๋ฉฐ
ํ์ ์คํฌ๋ฆฝํธ๋ ๋ค์ํ ๋ด์ฅ ํ์ ์ ์ ๊ณตํ๋ค. ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๊ฐ์ ํ์ ์ ์ถ๋ก ๋๋ก ํ๊ฑฐ๋ ๊ฐ์ ํ์ ์ ๋ช ์ํ ์ ์๋ค. let๊ณผ var๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ๋ฐ์ ์ธ ํ์ ์ผ๋ก ์ถ๋ก ํ๋ ๋ฐ๋ฉด, const๋ฅผ ์ด์ฉํ๋ฉด ๋ ๊ตฌ์ฒด์ ์ธ ํ์ ์ ์ถ๋ก ํ๊ฒ ๋ง๋ ๋ค. ๋๋ถ๋ถ์ ํ์ ์ ์ผ๋ฐ ํ์ ๊ณผ ๊ตฌ์ฒด์ ํ์ ๋ ๊ฐ์ง๋ฅผ ์ ๊ณตํ๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ํ์ ์ ๋ณดํต ์ผ๋ฐ ํ์ ์ ์๋ธํ์ ์ด๋ค.
