ํ์ฌ๋ค์ ์ฑ์ฉ๊ณต๊ณ ์ ๊ผญ ๋ฑ์ฅํ๊ณ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ๊ณ ์๋ TypeScript..!!
JavaScript์ superset์ด๋ผ๋๋ฐ ์ด๋ค ์ฐจ๋ณ์ ์ ๊ฐ์ง๊ณ ์๊ธฐ์ ์ด๋ ๊ฒ ํซํ์ง ๊ถ๊ธ์ฆ์ด ์๊ฒจ์ ํฌ์คํ
ํฉ๋๋ค.
- 1. Type
- 2. OOP(๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ)
TypeScript = JavaScript + type
Compile time์ type์ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ์๋โ , ํ์ ์๋ฌ๋ก ์ธํ ๋ฌธ์ ์ ์ ์ด๊ธฐ์ ๋ฐ๊ฒฌํ ์ ์์ด ํ์ ์ ์์ ์ฑโ
JavaScript ๋ ๋์ ํ์ ์ธ์ด๋ก ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ์ฆ, Runtime๋ ํ์ ์ด ๊ฒฐ์ ๋๊ณ ๋๋ฌธ์ ๋ฐํ์ ์๋ฌ ์ ์ํ์ ๋ ธ์ถ๋์ด์๋ค.๋๋ฌธ์ ๊ฐ๋ฐ ์ค ์ด์๋ฅผ ์ก์๋ด์ง ๋ชปํ ๊ฐ๋ฅ์ฑ์ผ๋ก ์ธํด ์ฌ์ฉ์๊ฐ ํ๋ก๊ทธ๋จ์ ์คํ ๋์ค์ ๋ณ์์ ์์์น ๋ชปํ ํ์ ์ด ๋ค์ด์ ํ์ ์๋ฌ ๋ฅผ ๋ฟ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
๋ฐ๋ฉด, TypeScript ๋ JavaScript์ type์ ๋ํ์ฌ ์์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ์๋ค. ์ ์ ํ์ ์ธ์ด๋ก ํ์ ์ ์ปดํ์ผ ์์ ๊ฒฐ์ ํ ์ ์๊ณ , ๊ฐ๋ฐ ์ค์ ์ปดํ์ผ ์๋ฌ ๋ฅผ ํตํด ์ฆ๊ฐ์ ์ผ๋ก type-checking errors ๋ฅผ ๋ฐ์๋ณผ ์ ์๋ค.
์ด๋, TypeScript ์ ํ์ ๊ธฐ๋ฅ์ ์ด์ฉํด ๊ตฌํํ๋ฉด ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ(TSC) ๋ ๋ฌธ์ ์ ์์ธ์ด ๋ฌด์์ธ์ง ์น์ ํ๊ฒ ์๋ ค์ฃผ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ์ ์์ธ์ ์ฝ๊ฒ ์ ์ ์๋ค. ๋๋ถ์ ์์ ์ ์ด๊ณ ํ์ฅ๊ฐ๋ฅํ ์ํํธ์จ์ด๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๋ค.
์ฌ๊ธฐ์ Transpile์ด๋, ์ด๋ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ์์ค์ฝ๋๋ฅผ ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ ์์ค์ฝ๋๋ก ๋ฐ๊ฟ์ฃผ๋ ํ๋ก๊ทธ๋จ์ด๋ค. ํธ๋์คํ์ผ๋ฌ๋ ํ ์คํธ๋ก ๋ ์์ค์ฝ๋๋ฅผ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ก ๋ฐ๊ฟ์ฃผ๋ Compile๊ณผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์๊ธด ์ฉ์ด์ด๋ค.
Compile | Transpile | |
---|---|---|
์์ค์ฝ๋ โจ | ๋ฐ์ด๋๋ฆฌ ์ฝ๋ | ์์ค์ฝ๋(๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด) |
TypeScript ์ฝ๋๋ tsc(ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ)๋ babel์ ํตํด์ JavaScript์ฝ๋๋ก ๋ณํ๋๋ค. ๋๋ถ์ JS Runtime ํ๊ฒฝ์ด ์กด์ฌํ๋ ์ด๋ค ๊ณณ์์๋ ์ฌ์ฉํ ์ ์๋ค.
โ TS๋ JS Runtime ๋์ํ๋ ๊ณณ์์ ๋ค ์ฌ์ฉํ ์๋ ์์ง๋ง, ๊ผญ TransCompiler๋ฅผ ํตํด JS๋ก ๋ณํํด์ฃผ์ด์ผํ๋ค.
1-1์์ ๋ณธ๋ฏ์ด JavaScript๋ Runtime๋ ํ์ ์ด ๊ฒฐ์ ๋๊ณ ๋๋ฌธ์ ๋ฐํ์ ์๋ฌ ์ ์ํ์ ๋ ธ์ถ๋์ด์๋ค. ๋๋ฌธ์ JS์์๋ ์ฌ์ฉ์์ input์ ๋ฐ๋ผ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ํ์ง๋ง TS์์๋ ๋ฏธ๋ฆฌ ํ์ ์ ์ง์ ํ๊ณ , compile time์์ ํ์ธํ๋ฏ๋ก ํ์ ์ ๋ํ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋ ๋๋ค.
JavaScript ๋ ์ฝ๋์์๋ type์ด ๋ช
์๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ค.
๋ฐ๋ฉด, TypeScript ๋ ๊ฐ์ฒด์ ํํ๋ฅผ ๋ช
์, ๋ณ์์ type๋ช
์, ํจ์๋ผ๋ฉด ์ธ์์ ๋ฆฌํด๊ฐ์ ๋ช
์๋ฅผ ํตํด์ ๋ ๋์ ๊ฐ๋
์ฑ์ ๋ณด์ฅ๋ฐ์ ์ ์๋ค. ๋ ๊ฐ๋
์ฑ์ ํตํด ์์ ์ฑ ๋ํ ํ๋ณดํ ์ ์๋ค.
// JavaScript function jsSum(num1, num2) { return num1 + num2; } // TypeScript โจ function sum(num1: number, num2: number): number { return num1 + num2; }
JS๋ก ์์ฑํ jsSum ์ด๋ผ๋ ํจ์๋ num1,2์ด๋ผ๋ ์ซ์๋ฅผ ๋ํ๋ ๊ธฐ๋ฅ์ ํ๋ฉด ์ข๊ฒ ์ง๋ง, ์๋ฌด ํ์ ์ด๋ ๋ค ๋ค์ด๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ Runtime Error๋ ํจ์์ ๋งค๊ฐ๋ณ์์ string์ ๋ฃ์ผ๋ฉด ๋ฌธ์์ด์ ์ด์ด์ฃผ๋ ๊ธฐ๋ฅ์ ํด์ ์๋์ ๋ชฉ์ ์ ์์ ์ ์๋ค.
TS ์ฝ๋๋ ์ ํํ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋์ง ์ด๋ค ๊ฐ์ ๋ฆฌํดํ๋์ง ๋ช ์ํด์ฃผ์ด์ ์์ ์ฑ โ + ๊ฐ๋ ์ฑ โ
Object-Oriented Programming์ ์ฝ์๋ก ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ปํ๊ณ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์ ํจ๋ฌ๋ค์ ์ค ํ๋์ด๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋ช ๋ น์ด์ ๋ชฉ๋ก์ผ๋ก ๋ณด๋ ์๊ฐ์์ ๋ฒ์ด๋ ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ๋ ๋จ์, ์ฆ "๊ฐ์ฒด"๋ค์ ๋ชจ์์ผ๋ก ํ์ ํ๊ณ ์ ํ๋ ๊ฒ์ด๋ค. ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
์ด์ ๊ฐ์ด FP(ํจ์ํ ํ๋ก๊ทธ๋๋ฐ)์ด ์์ฃผ ์ธ๊ธ๋๋๋ฐ ํ์ ์ ๋ฆฌํด๋ณผ ์์ ์ด๋ค.
์ง๊ธ์ ๋ด๊ฐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๋ ๊ฒ์ ๋ํด์ ์๋ฒฝํ ์ดํดํ๊ณ ์ด ๊ธ์ ์์ฑํ์ง๋ ๋ชปํ์ง๋ง TS๋ฅผ ํตํด JS๋ณด๋ค ๋ ๋์ OOP๋ฅผ ํ ์ ์๋ค๋ ๊ฒ์ ๋ํด์ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
๊ฐ๋จํ๊ฒ OOP์ ๋ํด์ ์ ๋ฆฌํด๋ณด์
- ์์ฐ์ฑ โ
- ์ฝ๋ ํ๋ฆฌํฐ โ
- ์ ํ ๊ฐ๋ฐ ์๋ โ
๋ฌผ๋ก ์ฅ์ ๋ง ์๋ ๊ฒ์ ์๋๊ณ ์ผ๋ถ ๋ฌธ์ ๋ก ์ธํด FP๋ฅผ ์ฌ์ฉํด์ผํ๋ค๊ณ ํ๋ค,
๋ฌดํผ! OOP์๋ ์ด๋ฐ ์ฅ์ ๋ค๊ณผ ํน์ง์ด ์๊ณ JS์์๋ ์ด๋์ ๋ ๊ตฌํ์ด ๊ฐ๋ฅํ์ง๋ง, TS๋ก ์ธํด์ ๋ค๋ฅธ Class๋ฅผ ๋ฒ ์ด์ค๋ก ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค. ๋ญ๋ผ ์ค๋ช
ํด์ผํ ์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง... ๊ทธ๋ฅ OOP์์ ๋ Coolํ OOP....;;;
JS๋ ์๋ฐํ ๋งํ์๋ฉด "Prototype"์ ๋ฒ ์ด์ค๋ก OOP๋ฅผ ๊ตฌํํ ์ ์๋ค๊ณ ํ๋ค.
contstructor function ์ ์ด์ฉํ์ฌ class ๋ฅผ ์ฌ์ฉํด์ Object๋ฅผ ๋ง๋๋ ๊ฒ ์ฒ๋ผ ๊ฐํธํ๊ฒ Object๋ฅผ ๋ง๋ค ์ ์๋ค๊ณ ํ๋ค.
ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ๋ฒ์ผ๋ก ํ์คํ(?) OOP๋ฅผ ํ๋ ๊ฒ์ ์ด๋ ต๋ค๊ณ ํ๋ค.
๋, ES6์์ "class"๋ผ๋ ๊ฒ์ด ๋์
๋์์ง๋ง, ์ด๊ฒ ๋ํ "prototype"์ ๋ฒ ์ด์ค๋ก ํ๊ณ ์์ด์ ํ ์ ์๋ ๊ฒ์ด ๋ง์ด ์๋ค๊ณ ํ๋ค.
(OOP๋ ์ ๋ชจ๋ฅด๋๋ฐ ๋ญ ์ฐ๊ณ ์๋๊ฑด์ง...๊ผญ ์ ๋ฆฌํด์ผ์ง..)
๋ฐ๋ฉด, TypeScript๋ "class", "interface", "generic"๋ฑ ์ ํ์ฉํ์ฌ ๋ค๋ฅธ Class๋ฅผ ๋ฒ ์ด์ค๋กํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ฒ๋ผ ๊ฐ๋ ฅํ OOP๊ฐ ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค.
์์ ๊ฐ์ฅ ์ฃผ์ํ ์ฅ์ ์ธ์๋
๋ฑ์ ์ฌ๋ฌ ์ฅ์ ๋ค์ด ๋ ๋ง๋ค!
TypeScript๋ ์ฐ์ง ์์ ์ด์ ๊ฐ ์๋ค!
์ฐธ๊ณ ์๋ฃ | TypeScript ๊ณต์๋ฌธ์
์ฐธ๊ณ ์๋ฃ | Junho's Dev Wiki
์ฐธ๊ณ ์๋ฃ | TypeScript ํ๊ธฐ ์ ์ ์ด์ ๋๋ ์์์ผ์ง!