Interface, Type Alias

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ์ฒด์˜ ์ปค์Šคํ…€ ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” interface, type ์ด๋ ‡๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ด 2๊ฐœ์˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

Interface

An interface declaration is another way to name an object type

Typescript ๊ณต์‹๋ฌธ์„œ์— ์“ฐ์—ฌ์žˆ๋Š” interface์˜ ์„ค๋ช…์ด๋‹ค. ํ•ด์„ํ•˜์ž๋ฉด ๊ฐ์ฒด์˜ ํƒ€์ž…์— ๋ณ„์นญ์„ ์ •ํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด๋‹ค.

interface Sample {
    name: string;
}
function useInterface(user: Sample){
    const {name} = user;
    console.log(name);
}

const user1 = '์ธํ„ฐํŽ˜์ด์Šค'
useInterface(user1); // '์ธํ„ฐํŽ˜์ด์Šค'

์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐ์ฒด๊ฐ€ ์–ด๋– ํ•œ ํƒ€์ž…์„ ๊ฐ€์งˆ๊ฒƒ์ธ์ง€ ๋ช…์‹œ์ ์œผ๋กœ ์ •ํ•ด์ค„์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ interface๋กœ ์ •์˜ํ•œ ์†์„ฑ์— ํ™•์žฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด

// extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ํ™•์žฅ
interface Sample {
    name: string;
}
interface ExtendSample extends Sample {
    age : number;
}
const user2 : ExtendSample = {
    name : 'extends๋ฅผ ์‚ฌ์šฉํ•ด ํ™•์žฅ๋œ ์ธํ„ฐํŽ˜์ด์Šค',
    age : 12
}

// ์„ ์–ธ์  ํ™•์žฅ
interface ExtendSample {
    address : string;
}
const user3 : ExtendSample = {
    name : '์„ ์–ธ์  ํ™•์žฅ์„ ์‚ฌ์šฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค',
    age : 20,
    address : '์„œ์šธ ํŠน๋ณ„์‹œ'
}

์œ„ ์˜ˆ์‹œ ์ฝ”๋“œ์ฒ˜๋Ÿผextends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์žฅ ํ•˜๊ฑฐ๋‚˜, ๊ฐ™์€ ์ด๋ฆ„์˜ interface๋ฅผ ๋‹ค์‹œ ์„ ์–ธํ•˜์—ฌ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

interface๋Š” ์œ„ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์›์‹œ ์ž๋ฃŒํ˜•์€ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

// ์•„๋ž˜์ฒ˜๋Ÿผ ์›์‹œ ์ž๋ฃŒํ˜•์„ interface๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
interface Address extends string{
}

Type Alias

type alias ์—ญ์‹œ interface์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ํŠน์ •ํ•œ ํƒ€์ž… ๋˜๋Š” interface๋ฅผ ์ฐธ์กฐํ• ์ˆ˜ ์žˆ๋Š” ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์นญํ•˜๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค. interface์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ extends ํ‚ค์›Œ๋“œ ๋Œ€์‹  & ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์œ ์˜ํ•  ์ ์€ interface๋Š” ์„ ์–ธ์  ํ™•์žฅ์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ, type์€ ์„ ์–ธ์  ํ™•์žฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

type Sample = {
    name : string;
}
const user1 : Sample = {
    name : 'ํƒ€์ž…์‚ฌ์šฉ'
}

// type ํ™•์žฅ
type Sample2 = Sample & {
    age : number;
}
const user2 : Sample2 = {
    name : 'ํƒ€์ž… ํ™•์žฅ',
    age : 20
}

// Error: Duplicate identifier 'Sample'.
type Sample = {
    address : string
}

type์€ ์ƒˆ๋กœ์šด ์œ ํ˜•์„ ์ •์˜ํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ธฐ์กด์˜ ํƒ€์ž…์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ๋ณ„์นญ์„ ์ •์˜ํ•  ๋ฟ์ด๋‹ค.

interface
type alias

์œ„ ์‚ฌ์ง„์„ ๋ณด๋ฉด interface๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ์ž๋ฃŒํ˜•์ด ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋˜๋Š”๋ฐ ๋ฐ˜ํ•ด, type alias๋ฅผ ์‚ฌ์šฉํ–ˆ์„๋•Œ๋Š” ๋ณ„์นญ๋งŒ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, interface์—์„œ ๋ถˆ๊ฐ€๋Šฅํ•˜๋˜ ์›์‹œ ์ž๋ฃŒํ˜•์˜ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

type PrimitiveType = string;
type PrimitiveType2 = string | number;

์ด๋Ÿฐ์‹์œผ๋กœ ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋Š” ์›์‹œ์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด์„œ type alias๋ฅผ ์„ ์–ธ ํ• ์ˆ˜๋„ ์žˆ๋‹ค.

Last updated