ํ์ ๋ณ์นญ(Type Alias)
ํ์ ๋ณ์นญ์ ์ฌ์ฉํ๋ฉด ํ์ ์ ์๋ฅผ ๋ง์น ๋ณ์๋ฅผ ์ ์ธํ๋ฏ ์ ์ํ ์ ์๋ค.
ํ์ ๋ณ์นญ์ ํ์์ฑ
let user: {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
} = {
id: 1,
name: "์ ์๊ฒฝ",
nickname: "f1rstf1y9",
birth: "0119",
bio: "hello",
location: "Korea",
};
let user2: {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
} = {
...
};
๋ง์ฝ ์์ ๊ฐ์ด ๋์ผํ ํํ์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ํ์ ์ ์ฌ์ฉํ๋ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ๊ฐ ์์ ๋๋ฅผ ์๊ฐํด๋ณด์. ๊ฐ์ฒด ๊ฐ์๊ฐ ์ ์ ์ง๊ธ๋ ์ฝ๋์ ์ค๋ณต์ด ๋ฐ์ํ๊ณ ์์ด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ , ๋ง์ฝ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐ๋ผ๋ ํ๋ค๊ฐ ์ผ์ผ์ด ๋ค ๊ณ ์ณ์ค์ผํด์ ์ ์ง๋ณด์ํ๊ธฐ๋ ๋ถํธํ๋ค. ์ด๋ด ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก ํ์ ๋ณ์นญ์ด๋ค.
ํ์ ๋ณ์นญ ์ ์ํ๊ธฐ
type User = {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
};
ํ์
๋ณ์นญ์ ์ด์ฉํ๊ธฐ ์ํด์๋ type ํ์
์ด๋ฆ = ํ์
ํํ๋ก ํ์
์ ์ ์ํ๋ค. ์ ์์ ์์๋ User
๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ฐ์ฒด ํ์
์ ์ ์ํ๋ค.
์ด๋ ๊ฒ ๋ง๋ ํ์ ๋ณ์นญ์ ๋ง์น ๋ณ์์ ์ผ๋ฐ์ ์ธ ํ์ ์ฃผ์์ ๋ฌ๋ฏ์ด, ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
let user: User = {
id: 1,
name: "์ ์๊ฒฝ",
nickname: "f1rstf1y9",
birth: "0119",
bio: "hello",
location: "Korea",
};
let user2: User = {
...
};
ํ์ ๋ณ์นญ ์ฌ์ฉ ์ ์ฃผ์ ์ฌํญ
๋์ผํ ์ค์ฝํ์ ๋์ผํ ์ด๋ฆ์ ํ์ ๋ณ์นญ์ ์ ์ธํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
์ค์ฝํ๊ฐ ๋ค๋ฅด๋ค๋ฉด ๋์ผํ ์ด๋ฆ์ ํ์ ๋ณ์นญ์ ์ ์ธํ ์ ์๋ค.
type User = {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
};
function test() {
type User = string;
}
์ปดํ์ผ ๊ฒฐ๊ณผ
ํ์ ์คํฌ๋ฆฝํธ์ ํ์ ๊ด๋ จ ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ฝ๋๋ ์ปดํ์ผ ํ ๋ชจ๋ ์ฌ๋ผ์ง๋ค. ํ์ ๋ณ์นญ ์ญ์ ํ์ ๊ด๋ จ ๋ฌธ๋ฒ์ด๋ฏ๋ก ์ปดํ์ผ ๊ฒฐ๊ณผ ์ฌ๋ผ์ง๋ค.
์ธ๋ฑ์ค ์๊ทธ๋์ฒ(Index Signature)
์ธ๋ฑ์ค ์๊ทธ๋์ฒ๋ ๊ฐ์ฒด ํ์ ์ ์ ์ฐํ๊ฒ ์ ์ํ ์ ์๋๋ก ๋๋ ํน์ํ ๋ฌธ๋ฒ์ด๋ค.
์ธ๋ฑ์ค ์๊ทธ๋์ฒ์ ํ์์ฑ
type CountryCodes = {
Korea: string;
UnitedStates: string;
UnitedKingdom: string;
...
};
let countryCodes: CountryCodes = {
Korea: "ko",
UnitedStates: "us",
UnitedKingdom: "uk",
...
};
์์ ๊ฐ์ด ์ฌ๋ฌ ๊ตญ๊ฐ๋ค์ ์์ด ์ฝ๋๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด๊ฐ ์์ ๋, ๋ง์ฝ ๊ตญ๊ฐ์ ๊ฐ์๊ฐ 100๊ฐ๊ฐ ๋์ด๊ฐ๋ค๊ณ ์๊ฐํด๋ณด์. 100๊ฐ๊ฐ ๋๋ ๋ชจ๋ ํ๋กํผํฐ์ ๋ํ ํ์ ์ ์๋ฅผ ์ผ์ผ์ด ํด์ฃผ์ด์ผํ๊ธฐ ๋๋ฌธ์ ์๋นํ ๊ท์ฐฎ์ ์์ ์ด ๋ ๊ฒ์ด๋ค. ์ด๋ด ๋ ์ธ๋ฑ์ค ์๊ทธ๋์ฒ๋ฅผ ์ด์ฉํ๋ฉด ์ผ์ผ์ด ๋ชจ๋ ํ๋กํผํฐ์ ๋ํด ํ์ ์ ์ ์ํ ํ์์์ด ๊ฐ๋จํ๊ฒ ์ ์ํ ์ ์๋ค.
์ธ๋ฑ์ค ์๊ทธ๋์ฒ ๋ฌธ๋ฒ ์ฌ์ฉํ๊ธฐ
type CountryCodes = {
[key:string]: string;
};
์์ ๊ฐ์ด [key:ํ์
]: ํ์
ํํ๋ก ์ธ๋ฑ์ค ์๊ทธ๋์ฒ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. [key:string]: string
์ ๊ฒฝ์ฐ 'ํด๋น ๊ฐ์ฒด ํ์
์๋ key๊ฐ string ํ์
์ด๊ณ value๊ฐ string ํ์
์ธ ๋ชจ๋ ํ๋กํผํฐ๊ฐ ํฌํจ๋๋ค.'๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ๋๋ค. ๋ฐ๋ผ์ countryCodes
๊ฐ์ฒด์ ์๋ ๋ชจ๋ ํ๋กํผํฐ๋ key, value๊ฐ ๋ชจ๋ string ํ์
์ด๋ฏ๋ก ํด๋น ํ์
์ ํฌํจ๋์ด์ ์ผ์ผ์ด ํ์
์ ์ง์ ํด์ค ํ์๊ฐ ์์ด์ง๋ค.
type CounterNumberCodes = {
[key: string]: number;
};
let countryNumberCodes: CounterNumberCodes = {
Korea: 410,
UnitedState: 840,
UnitedKingdom: 826,
};
์ซ์ ์ฝ๋๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ์์ ๊ฐ์ด ์ ์ํด์ค ์ ์๋ค.
type CounterNumberCodes = {
[key: string]: number;
Korea: number;
};
let countryNumberCodes: CounterNumberCodes = {
// โ Korea ํ๋กํผํฐ๊ฐ ์์ผ๋ฏ๋ก ์ค๋ฅ ๋ฐ์!
UnitedState: 840,
UnitedKingdom: 826,
};
๋ง์ฝ ๊ฐ์ฒด์ ๋ฐ๋์ ํฌํจ๋์ด์ผ ํ๋ ํ๋กํผํฐ๊ฐ ์๋ค๋ฉด ์ง์ ๋ช ์ํด์ค ์๋ ์๋ค.
์ธ๋ฑ์ค ์๊ทธ๋์ฒ ์ฌ์ฉ ์ ์ฃผ์ ์ฌํญ
type CounterNumberCodes = {
[key: string]: number;
Korea: string; // โ ์ค๋ฅ ๋ฐ์!
};
๋ง์ฝ ์ธ๋ฑ์ค ์๊ทธ๋์ฒ๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ถ๊ฐ๋ก ํน์ ํ๋กํผํฐ์ ํ์ ์ ๋ช ์ํ๊ณ ์ ํ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค ์๊ทธ๋์ฒ์ value ํ์ ๊ณผ ์ถ๊ฐํ ํ๋กํผํฐ์ value ํ์ ์ด ํธํ๋๊ฑฐ๋ ์ผ์นํด์ผ ํ๋ค. ์์ ๊ฒฝ์ฐ number ํ์ ๊ณผ string ํ์ ์ ํธํ๋์ง ์์ผ๋ฏ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ด๊ฑฐํ(Enum) ํ์
์ด๊ฑฐํ ํ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์๋ ์กด์ฌํ์ง ์๋ ํ์ ์คํฌ๋ฆฝํธ์ ํน๋ณํ ํ์ ์ผ๋ก, ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๋์ดํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
์ด๊ฑฐํ ํ์ ์ ํ์์ฑ
const user1 = {
name: "์ ์๊ฒฝ",
role: 0, // 0์ ๊ด๋ฆฌ์
};
const user2 = {
name: "ํ๊ธธ๋",
role: 1, // 1์ ์ผ๋ฐ ์ ์
};
const user3 = {
name: "์๋ฌด๊ฐ",
role: 2, // 3์ ๊ฒ์คํธ
};
๋ง์ฝ ์์ ๊ฐ์ด ๊ฐ์ฒด์ role
ํ๋กํผํฐ์ ๊ฐ์ ๋ฐ๋ผ ์ด๋ ํ ์ญํ ์ ๋ถ์ฌํ๋ ค๊ณ ํ๋ค๊ณ ์๊ฐํด๋ณด์. ์ง๊ธ์ ๋จ์ํ ์ซ์๋ก ํํํ๊ณ ์๊ธฐ ๋๋ฌธ์ 0, 1, 2๊ฐ ๊ฐ๊ฐ ์ ํํ ์ด๋ค ์ญํ ์ ํ๋์ง ์ฝ๋๋ง์ผ๋ก ํ์
ํ๊ธฐ ์ด๋ ต๋ค. ์ฝ๋์ ์์ด ๋์ด๋๋ฉด ๊ด๋ฆฌ์์๊ฒ ์ด๋ค ์ซ์๋ฅผ ์ ์ฅํด์ผ ํ๊ณ ์ผ๋ฐ ์ ์ ์๊ฒ ์ด๋ค ์ซ์๋ฅผ ์ ์ฅํด์ผ ํ๋์ง ํท๊ฐ๋ฆด ์๋ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ์ด๊ฑฐํ ํ์
์ ์ฌ์ฉํด์ ๋ณด๋ค ์์ ํ๊ณ ์ง๊ด์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
์ด๊ฑฐํ ํ์ ์ฌ์ฉํ๊ธฐ
enum Role {
ADMIN = 0,
USER = 1,
GUEST = 2,
}
const user1 = {
name: "์ ์๊ฒฝ",
role: Role.ADMIN,
};
const user2 = {
name: "ํ๊ธธ๋",
role: Role.USER,
};
const user3 = {
name: "์๋ฌด๊ฐ",
role: Role.GUEST,
};
์์ ๊ฐ์ด ์ด๊ฑฐํ ํ์
Role
์ ์ ์ธํ๊ณ , ๊ฐ ๋ฉค๋ฒ์ ๊ฐ์ ์ง์ ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด์ ๊ฐ์ผ๋ก Role
์ ๋ฉค๋ฒ๋ฅผ ํ์ฉํ ์ ์๋ค.
์ซ์ ์ด๊ฑฐํ
๋ง์ฝ ๋ฉค๋ฒ๋ฅผ ์ด๊ธฐํํ์ง ์์ผ๋ฉด ์๋์ผ๋ก 0๋ถํฐ 1์ฉ ์ฆ๊ฐํ๋ ๊ฐ์ด ํ ๋น๋๋ค.
enum Role {
ADMIN, // ์๋์ผ๋ก 0 ํ ๋น
USER, // ์๋์ผ๋ก 1 ํ ๋น
GUEST, // ์๋์ผ๋ก 2 ํ ๋น
}
๋ํ ๋ง์ฝ ๊ฐ์ ์ด๊ธฐํํ ๋ฉค๋ฒ๊ฐ ์๊ณ , ๊ทธ ๋ค์ ๋ฉค๋ฒ๋ค์ ๊ฐ์ ์ด๊ธฐํํ์ง ์์๋ค๋ฉด ์ด๊ธฐํ๋ ๋ฉค๋ฒ์ ๊ฐ์์ 1์ฉ ์ฆ๊ฐํ๋ ๊ฐ์ด ํ ๋น๋๋ค.
enum Role1{
A = 10,
B, // ์๋์ผ๋ก 11 ํ ๋น
C, // ์๋์ผ๋ก 12 ํ ๋น
}
enum Role2 {
A, // ์๋์ผ๋ก 0 ํ ๋น
B, // ์๋์ผ๋ก 1 ํ ๋น
C = 10,
D, // ์๋์ผ๋ก 11 ํ ๋น
E, // ์๋์ผ๋ก 12 ํ ๋น
}
๋ฌธ์์ด ์ด๊ฑฐํ
์ด๊ฑฐํ ํ์ ์ ๋ฉค๋ฒ์ ๋ฌธ์์ด์ ํ ๋นํ ์๋ ์๋ค. ๋ชจ๋ ๋ฉค๋ฒ์ ๊ฐ์ด ๋ฌธ์์ด ๊ฐ์ธ enum์ ๋ฌธ์์ด ์ด๊ฑฐํ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
enum Language {
korean = "ko",
english = "en",
}
const user1 = {
name: "์ ์๊ฒฝ",
language: Language.korean,
};
const user2 = {
name: "ํ๊ธธ๋",
language: Language.korean,
};
const user3 = {
name: "์๋ฌด๊ฐ",
language: Language.english,
};
์ปดํ์ผ ๊ฒฐ๊ณผ
enum์์ ์ฃผ์ํ ์ ์ ์ปดํ์ผ๋ ๋ ๋ค๋ฅธ ํ์ ์ฒ๋ผ ์ฌ๋ผ์ง๋ ๊ฒ์ด ์๋๋ผ, ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ก ๋ณํ๋๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ๊ฐ์ฒด ํ๋กํผํฐ์ ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
์ฐธ๊ณ
๋ณธ ํฌ์คํธ๋ ์ด์ ํ๋์ 'ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ ํ์ ์คํฌ๋ฆฝํธ(TypeScript)' ๊ฐ์๋ฅผ ์๊ฐํ๋ฉฐ ์์ฑํ์์ต๋๋ค.
ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ ํ์ ์คํฌ๋ฆฝํธ(TypeScript) ๊ฐ์ | ์ด์ ํ Winterlood - ์ธํ๋ฐ
์ด์ ํ Winterlood | , ํ๋ก ํธ์๋์ ํผํ ์ ์๋ ๋์ธ ํ์ ์คํฌ๋ฆฝํธ,์ด์ ๋ ์ ๋๋ก ์ ๋ณตํ ๋๊ฐ ์์ต๋๋ค! ๐ [์ฌ์ง]์ธํ์ฝ 2023 'ํ์ ์คํฌ๋ฆฝํธ๋ ์ ๊ทธ๋ด๊น?' ๋ฐํ์์ ๊ฐ์์ ๋๋ค. ๐ง ๋ฐฐ์
www.inflearn.com