Typescript๋ž€?

1. ๊ฐœ์š”

๋งŽ์€ ๊ธฐ์—…๋“ค์—์„œ typescirpt์— ๋Œ€ํ•œ ์—ญ๋Ÿ‰์„ ๊ฐ€์ง„ ๊ฐœ๋ฐœ์ž๋“ค์„ ํ•„์š”๋กœํ•˜๊ณ  ์žˆ๋‹ค. javascript๊ณผ ์ด๋ฆ„์ด ๋น„์Šทํ•œ typescript๋Š” ๋ฌด์—‡์ด๋ฉฐ? javascript์™€๋Š” ์–ด๋–ค ์ฐจ์ด์ ์ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž. ๋˜ํ•œ typescript๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŠน์ง•๋„ ํ•จ๊ป˜ ์‚ดํŽด๋ณด์ž.


2. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(typescript)๋ž€?

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‹จ์ ์„ ๋ณด์•ˆํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค. ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €, ํ˜ธ์ŠคํŠธ, ์šด์˜์ฒด์ œ์—์„œ ๋™์ž‘ํ•œ๋‹ค.

TypeScript is JavaScript with syntax for types. TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.

์œ„๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ์„ค๋ช…์ด๋‹ค. ์ด๋ฅผ ํ† ๋Œ€๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ค๋ช…ํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ๋ฐ˜์„ ๋งŒ๋“  ๊ฐ•๋ ฅํ•œ ์–ธ์–ด์ด๋‹ค.

  • ํƒ€์ž…์„ ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋– ํ•œ ํ™˜๊ฒฝ์—์„œ๋„ ํ›จ์”ฌ ์ข‹์€ ๊ฒฝํ—˜์„ ์„ ์‚ฌํ•œ๋‹ค.

  • ํƒ€์ž…์ด ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ์–ธ์–ด์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ํƒ€์ž…์ด๋ž€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ์ข…๋ฅ˜(string, boolean, int ๋“ฑ)๋ฅผ ์˜๋ฏธํ•œ๋‹ค.


3. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์ง•

์•„๋ž˜๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์— ์žˆ๋Š” ํŠน์ง•์„ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด๋‹ค.

  1. JavaScript and More

    TypeScript adds additional syntax to JavaScript to support a tighter integration with your editor. Catch errors early in your editor.

    • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๋ฌธ๋ฒ•์„ ์ถ”๊ฐ€ํ•˜์—ฌ vscode์™€ ๊ฐ™์€ ์—๋””ํ„ฐ์—์„œ ์˜ค๋ฅ˜๋ฅผ ์žก๋Š”๋ฐ ๋„์™€์ค€๋‹ค.

  2. A Result Yout Can Trust

    TypeScript code converts to JavaScript, which runs anywhere JavaScript runs: In a browser, on Node.js or Deno and in your apps.

    • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ(๋ธŒ๋ผ์šฐ์ €, ๋…ธ๋“œJS, Deno)์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

  3. Safety at Scale

    TypeScript understands JavaScript and uses type inference to give you great tooling without additional code.

    • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ถ”๊ฐ€๊ฐ€์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ ์—†์ด ํƒ€์ž…์˜ ์œ ํ˜•์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์•„๋ž˜์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

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

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์Šˆํผ์…‹: ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ๋ฌธ๋ฒ•์„ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋‹ค.

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

  • ์ ์ง„์  ์ „ํ™˜ ๊ฐ€๋Šฅ: ๊ธฐ์กด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด๋‚˜ ํŠน์ • ๊ธฐ๋Šฅ์—๋งŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„์ž…ํ•จ์œผ๋กœ์จ ํ”„๋กœ์ ํŠธ๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.


4. Javascript vs Typescript

์•ž์œผ๋กœ typescript ํŒŒํŠธ์—์„œ ๋งŽ์€ ๋‚ด์šฉ์˜ typescript๋ฅผ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ๋Š” ํ•˜๋‚˜์˜ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ๋‘ ์–ธ์–ด์˜ ์ฐจ์ด์ ์„ ์‚ดํŽด๋ณด์ž.

a์™€ b๋ผ๋Š” ์ธ์ž๋ฅผ ๋ฐ›์•„์„œ ๋”ํ•˜๋Š” ํ•จ์ˆ˜์ธ add function๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

๋จผ์ € ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

const add = (a, b) => a + b;

์ธ์ž์— ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ๋„ฃ์–ด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด๋ณด์ž.

add(1, 2); // 3
add("2", 3); // "23"
add("Hello", "world"); // "Helloworld"
add(null, 3); // 3
add(true, false); // 1

์œ„์— ๋ณด์ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ a, b์— ์–ด๋– ํ•œ ํƒ€์ž…์˜ ์ธ์ž๋ฅผ ๋„ฃ๊ณ  ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฒˆ์—” ์œ„์˜ add function์„ ๊ทธ๋Œ€๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? a, b์— ์–ด๋– ํ•œ ํƒ€์ž…๋„ ์„ ์–ธํ•˜์ง€ ์•Š์•„ ์—๋””ํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋ณด์—ฌ์ค„ ๊ฒƒ์ด๋‹ค.

type error

์œ„์˜ ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” a, b์— ํƒ€์ž…์„ ์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

const add = (a: number, b: number) => a + b;

์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๊ฐ๊ฐ์˜ ์ธ์ž์— number๋ผ๋Š” ํƒ€์ž…์„ ์ง€์ •ํ•ด์ฃผ์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ธ์ž์— ํƒ€์ž…์„ ์ •ํ•ด๋‘๋ฉด numberํƒ€์ž…์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํƒ€์ž…์„ ์ธ์ž๋กœ ๋„ฃ์–ด ์‹คํ–‰์„ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์‹œ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋ณด์—ฌ์ค„ ๊ฒƒ์ด๋‹ค.

add(true, 4);
type error

์ด๋ ‡๋“ฏ ๊ฐœ๋ฐœ์ž๋“ค์€ ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ์ด ๋˜๊ธฐ ์ „ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ์—๋Ÿฌ๋ฅผ ๋ณด์—ฌ์ฃผ์–ด ์ฝ”๋“œ์˜ ๋ฌธ์ œ๋ฅผ ์•Œ๋ ค์ฃผ์–ด ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

typescript palyground์—์„œ ์—ฌ๋Ÿฌ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜๋Š” ์œ„์˜ add function๋ฅผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ palyground์—์„œ ์ž‘์„ฑํ•˜๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์™€ ๋น„๊ตํ•œ ์‚ฌ์ง„์ด๋‹ค.

typescript playground

5. Conclusion

์•„์ง ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•ด ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค. ๋ฆฌ์•กํŠธ์™€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•จ๊ป˜ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ •๋ฆฌ๋ฅผ ๊พธ์ค€ํžˆ ํ•˜์—ฌ ์•ž์œผ๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊พธ์ค€ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ž. ํŠนํžˆ ๋ฆฌ์•กํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•ด์„œ ๋งŽ์ด ๋ฐฐ์šฐ์ž.๐Ÿ˜


์ฐธ๊ณ 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ ํ™œ์šฉ๋„๊ฐ€ ๋†’์•„์ง€๋Š” ์›น ํ”„๋ก ํŠธ์—”๋“œ ์–ธ์–ด, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TypeScript)


๐Ÿ“… 2022-07-25

Last updated