๐Ÿง‘โ€๐Ÿ’ป ์งง์€ํ˜ธํก/JSยทTS

[์ดํŽ™ํ‹ฐ๋ธŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ดํ•ดํ•˜๊ธฐ : ํƒ€์ž…๊ณผ ํƒ€์ž… ํ˜ธํ™˜์„ฑ

ํ•œ๊ทœ์ง„ 2023. 3. 28. 19:45

ํƒ€์ž…์„ ์“ฐ๋Š”๋ฐ์„œ ์‹ค๋ ฅ์˜ ํŽธ์ฐจ๊ฐ€ ํฌ๊ฒŒ ๋‚˜ํƒ€๋‚œ๋‹ค. ์ง€๋‚œ ๋„ฅ์Šคํ„ฐ์ฆˆ ํ™œ๋™ ํ›„๊ธฐ์— ์ ์—ˆ๋˜ ๋ฌธ์žฅ์ด๋‹ค. ์–ด๋ ต๊ฒŒ ๋ง‰ ํƒ€์ž…์„ ์ด๋ฆฌ์ €๋ฆฌ ์“ฐ๊ณ  ์ด๋Ÿฐ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์˜ค๋žซ๋™์•ˆ ๋™๋™๋Œ€๋‹ค ๋ฐœ๊ฒฌํ•œ ๋ฐฉ๋ฒ•์ด ์•Œ๊ณ ๋ณด๋ฉด ๊ต‰์žฅํžˆ ๊ธฐ๋ณธ์ ์ธ ํƒ€์ž… ๋ฌธ๋ฒ•์ด์—ˆ๋˜ ๊ฒฝ์šฐ๊ฐ€ ๊ฝค ์žˆ์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์–ผ๋ ˆ๋ฒŒ๋ ˆ ๊ฐœ๋ฐœํ•ด์˜จ ํ•œ๊ทœ์ง„์„ ์œ„ํ•œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ฟŒ์ˆ˜๊ธฐ ์Šคํ„ฐ๋””.

 

 

 

ํƒ€์ž… ์ดํ•ดํ•˜๊ธฐ

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

 

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

var foo;
console.log(typeof foo);	// undefined

foo = 3;
console.log(typeof foo);	// number

foo = 'hello;
console.log(typeof foo);	// string

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ์ด ์•„๋‹Œ ํ• ๋‹น์— ์˜ํ•ด ํƒ€์ž…์ด ๊ฒฐ์ •(ํƒ€์ž… ์ถ”๋ก )๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์žฌํ• ๋‹น์— ์˜ํ•ด ๋ณ€์ˆ˜์˜ ํƒ€์ž…์€ ์–ธ์ œ๋“ ์ง€ ๋™์ ์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง•์„ ๋™์  ํƒ€์ดํ•‘์ด๋ผ ํ•œ๋‹ค.

 

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

 

๋˜ํ•œ ๊ฐœ๋ฐœ์ž์˜ ์˜๋„์™€ ์ƒ๊ด€์—†์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ์•”๋ฌต์ ์œผ๋กœ ํƒ€์ž…์ด ์ž๋™์œผ๋กœ ๋ณ€ํ™˜๋˜๊ธฐ๋„ ํ•œ๋‹ค. ์ˆซ์ž ํƒ€์ž…์ด๋ผ๊ณ  ์˜ˆ์ธกํ–ˆ์ง€๋งŒ ์‚ฌ์‹ค์€ ๋ฌธ์ž์—ด ํƒ€์ž…์˜ ๋ณ€์ˆ˜์ผ ์ˆ˜ ๋„ ์žˆ๋‹ค๋Š” ๋ง. ์ฝ”๋“œ๋Š” ์˜คํ•ดํ•˜์ง€ ์•Š๋„๋ก ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์ฝ”๋“œ๊ฐ€ ์ข‹์€ ์ฝ”๋“œ๋‹ค.

์ฐธ๊ณ :๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋”ฅ๋‹ค์ด๋ธŒ 

 


 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ์˜ ํƒ€์ž…

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋‘๊ฐ€์ง€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ์ตœ์‹  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋„๋ก ๊ตฌ๋ฒ„์ „์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํŠธ๋žœ์ŠคํŒŒ์ผํ•œ๋‹ค.
  • ์ฝ”๋“œ์˜ ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ์ฒดํฌํ•œ๋‹ค.

์ด ๋‘๊ฐ€์ง€๋Š” ์„œ๋กœ ์™„๋ฒฝํžˆ ๋…๋ฆฝ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ,

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

 

์ฑ…์„ ์ฝ๋‹ค๋ณด๋ฉด ๋ฐ˜๋ณต์ ์œผ๋กœ ๋‚˜์˜ค๋Š” ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๋‹ค. ๋Ÿฐํƒ€์ž„์— ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒ์—์„œ ๊ฐ์ž์˜ ๊ฐ’๋“ค์„ ๊ฐ€์ง„๋‹ค. ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๊ฐ’๋“ค์„ ํ• ๋‹น ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „, ์ฆ‰ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ์ฒดํฌํ•˜๋Š” ์ˆœ๊ฐ„์—๋Š” 'ํƒ€์ž…'์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

 

'ํ• ๋‹นํ•œ ๊ฐ€๋Šฅํ•œ ๊ฐ’๋“ค์˜ ์ง‘ํ•ฉ'์„ ํƒ€์ž…์ด๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉํ–ฅ์œผ๋กœ๋Š” ํ•œ๋ฒˆ๋„ ์ƒ๊ฐํ•ด๋ณธ ์  ์—†์ง€๋งŒ, ์œ ๋‹ˆ์˜จ(|)์ด๋‚˜ ์ธํ„ฐ์„น์…˜(&)์ด๋ผ๋Š” ์ด๋ฆ„์˜ ํƒ€์ž…์ด ์žˆ๋Š”๊ฑธ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋‚ฉ๋“ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐ€์žฅ ์ž‘์€ ์ง‘ํ•ฉ์€ ๊ณต์ง‘ํ•ฉ์ด๋‹ค. never ํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋œ๋‹ค.
  • ์—ฌ๋Ÿฌ๊ฐœ์˜ ํƒ€์ž…์„ ๋ฌถ์„ ๋•Œ๋Š” ์œ ๋‹ˆ์˜จ ํƒ€์ž…์„ ์ด์šฉํ•œ๋‹ค. Union ์€ ํ•ฉ์ง‘ํ•ฉ(A โˆช B)์ด๋‹ค.
  • ์ธํ„ฐ์„น์…˜ ํƒ€์ž…์€ ๊ต์ง‘ํ•ฉ(A โˆฉ B)์ด๋‹ค.A & B ํƒ€์ž…์˜ ๊ฐ’์€ A ํƒ€์ž…์—๋„, B ํƒ€์ž…์—๋„ ํ• ๋‹น ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ A์™€ B ๋ชจ๋‘ ๊ฐ์ฒด ํƒ€์ž…์ด๋ผ๋ฉด A & B ํƒ€์ž…์˜ ๊ฐ์ฒด๋Š” A์™€ B ํƒ€์ž… ๊ฐ๊ฐ์— ์ •์˜๋œ ์†์„ฑ ๋ชจ๋‘๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.์•„๋ฌด๊ฒƒ๋„ ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด ์—†์œผ๋ฏ€๋กœ never๊ฐ€ ๋œ๋‹ค.

 

type a = { foo: number; bar: string }; 
type b = { foo: number; baz: string }; 
type c = a & b; 
const example: c = { foo: 1, bar: "bar", baz: "baz" }; //๋ฌธ์ œ ์—†๋‹ค!! 

type FavoriteSport = "polo" | "ski"; 
type BallSport = "polo" | "baseball"; 
type FavoriteBallSport = FavoriteSport & BallSport; // polo

A & B ํƒ€์ž…์˜ ๊ฐ’์€ A ํƒ€์ž…์—๋„, B ํƒ€์ž…์—๋„ ํ• ๋‹น ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ A์™€ B ๋ชจ๋‘ ๊ฐ์ฒด ํƒ€์ž…์ด๋ผ๋ฉด A & B ํƒ€์ž…์˜ ๊ฐ์ฒด๋Š” A์™€ B ํƒ€์ž… ๊ฐ๊ฐ์— ์ •์˜๋œ ์†์„ฑ ๋ชจ๋‘๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

 

type FavoriteSport = "swimming" | "ski";
type BallSport = "football" | "baseball";
type FavoriteBallSport = FavoriteSport & BallSport; // never

 

๊ตฌ์กฐ์  ํƒ€์ดํ•‘๊ณผ ํƒ€์ž… ํ˜ธํ™˜์„ฑ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ณต์‹๋ฌธ์„œ์—์„œ ํƒ€์ž… ํ˜ธํ™˜์„ฑ์— ๊ด€ํ•œ ๊ธ€์— ์ด๋ ‡๊ฒŒ ์ ํ˜€์žˆ๋‹ค.

TypeScript์˜ ํƒ€์ž… ํ˜ธํ™˜์„ฑ์€ ๊ตฌ์กฐ์  ์„œ๋ธŒํƒ€์ดํ•‘(structural subtyping)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์ด๋ž€ ์˜ค์ง ๋ฉค๋ฒ„๋งŒ์œผ๋กœ ํƒ€์ž…์„ ๊ด€๊ณ„์‹œํ‚ค๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋ช…๋ชฉ์  ํƒ€์ดํ•‘(nominal typing)๊ณผ๋Š” ๋Œ€์กฐ์ ์ž…๋‹ˆ๋‹ค. TypeScript์˜ ๊ตฌ์กฐ์  ํƒ€์ž… ์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ ๊ทœ์น™์€ y๊ฐ€ ์ตœ์†Œํ•œ x์™€ ๋™์ผํ•œ ๋ฉค๋ฒ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด x์™€ y๋Š” ํ˜ธํ™˜๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ Duck Typing ๊ธฐ๋ฐ˜์ด๋‹ค. ๋งŒ์•ฝ ์–ด๋–ค ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ชจ๋‘ ์ œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค๋ฉด, ๊ทธ ๊ฐ’์ด ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•œ๋‹ค. JS์˜ ์ƒ์œ„ ์–ธ์–ด์ธ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ด๋ฅผ ๋ชจ๋ธ๋งํ•˜๊ธฐ์œ„ํ•ด ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ.

 

2D ๋ฒกํ„ฐ๋ฅผ ํƒ€์ž…์œผ๋กœ ๋ฐ›๋Š” calculateLength ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

interface Vector2D {
  x: number;
  y: number;
}

function calculateLength(v: Vector2D) {
  return Math.sqrt(v.x * v.x + v.y * v.y);
}

// ์ด๋ฆ„์ด ๋“ค์–ด๊ฐ„ ๋ฒกํ„ฐ ์ถ”๊ฐ€
interface NamedVector {
  name: string;
  x: number;
  y: number;
}

// NameVector์˜ ๊ตฌ์กฐ๊ฐ€ Vector2D์™€ ํ˜ธํ™˜
const v: NamedVector = { x: 3, y: 4, name: "Zee" };
calculateLength(v);

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

 

NamedVectorํƒ€์ž…์˜ v๋Š” calculateLength ํ•จ์ˆ˜๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” Vector2D ํƒ€์ž…์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋Ÿฐํƒ€์ž„ ์ƒ์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ํƒ€์ž…์ด ํ˜ธํ™˜๋œ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ.

 

 

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด? ์•„๋ž˜๋Š” 3์ฐจ์› ๋ฒกํ„ฐ๋ฅผ ์ •๊ทœํ™”ํ•˜๋Š” normalize ํ•จ์ˆ˜์ด๋‹ค.

interface Vector3D {
  x: number;
  y: number;
  z: number;
}

function normalize(v: Vector3D) {
  const length = calculateLength(v);
  return {
    x: v.x / length,
    y: v.y / length,
    z: v.z / length,
  };
}
normalize({ x: 3, y: 4, z: 5 });
// { x: 0.6, y: 0.8, z: 1 }

์ „์ฒด length๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์œ„์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ calculateLength๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. 2D ๋ฒกํ„ฐ๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ๋ฐ›๋„๋ก ํƒ€์ดํ•‘์ด ๋œ ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๋Œ€๋กœ๋ผ๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋‚ด๋ฑ‰์–ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ตฌ์กฐ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์—†์–ด ํƒ€์ž… ํ˜ธํ™˜์ด ํ—ˆ์šฉ๋˜์—ˆ๊ณ  ๋ฌธ์ œ์—†์ด ์‹คํ–‰๋˜์—ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋„ ์˜ค๋ฅ˜๊ฐ€ ์—†๋‹ค๊ณ  ๋ณด๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

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

 

์ฐธ๊ณ  https://toss.tech/article/typescript-type-compatibility

 


 

์ •๋ฆฌํ•˜์ž๋ฉด ์ด๋ ‡๋‹ค.

  • ํƒ€์ž…์€ ๊ฐ’๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์„ ํ†ตํ•ด ํƒ€์ž… ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.