enum
ํ์
์ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์๋ ์กด์ฌํ๋ ํ์
์ด์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์กด์ฌํ์ง ์๋ ํ์
์ด๋ค. ํ์
์คํฌ๋ฆฝํธ์๋ง ์กด์ฌํ๋ ์ด enum
ํค์๋์ ์ฌ์ฉํ๋ enum
์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์๋ณ์๋ค์ ์ค๊ดํธ ์ ์์ ๋ฃ๋ ๊ฒ์ด๋ค. ์ด๊ฑฐํ ํ์
์ ์ด๊ฑฐ ๋ชฉ๋ก์ ์ ๊ณตํ๋ค. ์ด ๋ชฉ๋ก์ ๋ผ๋ฒจ๋ค์ 0๋ถํฐ ์์ํ๋ ์ซ์๋ก ๋ณํ๋๋ฉฐ, ์ฌ๊ธฐ์๋ ์ฝ๋ ๋ด์์ ์์
๊ฐ๋ฅํ (์ธ๊ฐ์ด ์ฝ์ ์ ์๋) ๋ผ๋ฒจ๋ก ํํ ๋์ด์๋ค.const person = {
name: "Maximilian",
age: 30,
hobbies: ["Sports", "Cooking"],
role:,
};
role
์ 'admin', 'read_only', 'author'๋ฅผ ์ถ๊ฐํ๊ณ ์ ํ๋ค. ๊ฐ๊ฐ์ id
๋ 'admin'์์๋ 0์ผ๋ก ์ค์ ํ๊ณ , ์ฝ๊ธฐ ์ ์ฉ 'read_only'์ 1, ๊ทธ๋ฆฌ๊ณ 'author'์ 2๋ก ์ค์ ํ๋ค.const person = {
name: "Maximilian",
age: 30,
hobbies: ["Sports", "Cooking"],
role: 2, // author
};
id
์ด๋ค.)์ฒ๋ผ id
์ซ์๋ก ์ ํํ๊ฒ ์ค์ ํ ์ ์์ ๊ฒ์ด๋ค. ํ์ง๋ง ์ฌ๊ธฐ์ ํ ๊ฐ์ง ๋จ์ ์ด ์๋๋ฐ ๋ฐ๋ก ์ญํ (role
)์ด ์์ ์๋ ์๋ ์ซ์๋ฅผ ์ถ๊ฐํ ์ ์๋ค๋ ๊ฐ๋ฅ์ฑ์ด๋ค. ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ๋์ค์์์ผ role
์ ์ถ์ถํ๊ณ if
๊ฒ์ฌ๋ฅผ ์ํํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๊ฒ ๋๋ค. ๋ํ ๊ฐ๋ฐ์๋ก์ ์ด ์ฌ์ฉ์์ role
์ด ๋ฌด์์ผ์ง ๋ฐ๋ก ์ดํดํ๊ธฐ ์ด๋ ค์ธ ๊ฐ๋ฅ์ฑ๋ ์๋ค. 2๊ฐ 'author' ์ธ์ง 'admin' ์ธ์ง๋ฅผ ์ธ์ ๋ ์ธ์ฐ๊ณ ์์ง๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฐจ๋ผ๋ฆฌ ์ธ๊ฐ์ด ์ฝ์ ์ ์๋ ์๋ณ์๋ก ๊ตฌ๋ถํ๋ ๊ฒ์ด ํจ์ฌ ๋์์ง๋ ๋ชจ๋ฅธ๋ค. ์ด์ฉ๋ฉด ๋ฌธ์์ด ์๋ณ์๋ฅผ ์ฌ์ฉํด๋ณผ ์๋ ์์ ๊ฒ์ด๋ค. ์๋์ ๊ฒฝ์ฐ๋ผ๋ฉด ์ด๋จ๊น?const person = {
name: "Maximilian",
age: 30,
hobbies: ["Sports", "Cooking"],
role: "READ ONLY USER",
};
...
if (person.role === "READ-ONLY-USER") {
console.log('is read only');
}
const ADMIN = 0;
const READ_ONLY = 1;
const AUTHOR = 2;
const person = {
name: "Maximilian",
age: 30,
hobbies: ["Sports", "Cooking"],
role: ADMIN,
};
role
์ ํ์ํ ์์๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ด์ฉ๋ฉด ์ฐ๋ฆฌ์๊ฒ ๊ฝค๋ ์ต์ํ ๋ฐฉ๋ฒ์ผ ๊ฒ์ด๋ค.const ADMIN = 0;
const READ_ONLY = 1;
const AUTHOR = 2;
const person = {
name: "Maximilian",
age: 30,
hobbies: ["Sports", "Cooking"],
role: ADMIN,
};
if (person.role === ADMIN) {
console.log("is admin");
}
enum
์ ์์ ๋งํ ํจํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ํ์
์ด๋ค.enum Role
enum
ํค์๋๋ก enum
์ ์์ฑํ๊ณ , ํค์๋๋ ๋๋ฌธ์๋ก ์์ํ๋ Role
๋ก ์ง์ ํ๋ค. enum
์ญ์ ์ฌ์ฉ์ ์ง์ ํ์
์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋ฐฉ์์ ๋ฐ๋ฅด๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๊ดํธ ์์ ์
๋ ฅํ ๋ค,enum Role {
ADMIN,
READ_ONLY,
AUTHOR,
}
enum Role {
ADMIN,
READ_ONLY,
AUTHOR,
}
const person = {
name: "Maximilian",
age: 30,
hobbies: ["Sports", "Cooking"],
role: Role.ADMIN,
};
role
์์ Role.ADMIN
์ผ๋ก ์ ๊ทผํ์ฌ ๊ฐ์ ์ง์ ํ๋ค.enum Role {
ADMIN,
READ_ONLY,
AUTHOR,
}
const person = {
name: "Maximilian",
age: 30,
hobbies: ["Sports", "Cooking"],
role: Role.ADMIN,
};
...
if (person.role === Role.AUTHOR) {
console.log("is author");
}
if
๋ฌธ์์ role
์ด AUTHOR
์ธ์ง ํ์ธํ๊ณ ์ฐธ์ด๋ฉด ์ฝ์์ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋๋ก ํ๋ค. ์ง๊ธ๊น์ง ์ด ๋ชจ๋ ์์
์ ๋ผ๋ฒจ์ ์ซ์๋ก ํ ๋นํ๊ฒ ํด์ฃผ๋ enum
์ผ๋ก ์ํํด๋ณด์๋ค. ํด๋น ์ฝ๋๋ฅผ ์ปดํ์ผํ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ดํด๋ณด๋ฉด,var Role;
(function (Role) {
Role[(Role["ADMIN"] = 0)] = "ADMIN";
Role[(Role["READ_ONLY"] = 1)] = "READ_ONLY";
Role[(Role["AUTHOR"] = 2)] = "AUTHOR";
})(Role || (Role = {}));
var person = {
name: "Maximilian",
age: 30,
hobbies: ["Sports", "Cooking"],
role: Role.ADMIN,
};
...
if (person.role === Role.AUTHOR) {
console.log("is author");
}
enum Role {
ADMIN = 5,
READ_ONLY = 100,
AUTHOR = 200,
}
enum
์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋์์๋ง ๊ตญํ๋์ง ์๋๋ค. ํน์ ์ด์ ๋ก ์ธํด์ ์์ ์ซ์๋ฅผ 0์ผ๋ก ์์ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ, ์๋ณ์์ ๋ฑํธ๋ฅผ ์ถ๊ฐํ์ฌ ๋ค๋ฅธ ์ซ์๋ฅผ ์
๋ ฅํ ์๋ ์๋ค. ์์ ๊ฐ์ด 0์ด ์๋๋ผ 5๋ผ๋ฉด ์ด ์์ ๊ฐ ์๋ณ์ ๋ค์์ ๋ค๋ฅธ ์๋ณ์ ๊ฐ์ ์์ ๊ฐ์ผ๋ก๋ถํฐ ์ฆ๊ฐ์์ผ์ ํ ๋นํด์ค์ผ ํ๋ค. ์ด๋ฅผํ
๋ฉด ์ด์ ์ ๊ธฐ๋ณธ ๋์์ด 0, 1, 2 ์๋ค๋ฉด 5๋ก ์์ ๊ฐ์ ํ ๋นํ ์ง๊ธ์ 5, 6, 7์ด ๋๋ ๊ฒ์ด๋ค. ๋ฌผ๋ก enum
์๋ ์ซ์ ๋ฟ๋ง ์๋๋ผ ํ
์คํธ๋ฅผ ํ ๋นํ ์๋ ์๊ณ , ํผํฉ๋ ๊ฐ๋ฅํ๋ค.enum Role {
ADMIN = "ADMIN",
READ_ONLY = 1,
AUTHOR = "200",
}
ADMIN
)์ด 0์ด์ง๋ง ๋์์ ๋ค๋ฅธ ์์ผ๋ก ๊ตฌ์ฑํ๊ธฐ ์ํด์ ๋ฌธ์์ด์ ์ด์ด์ ์ซ์๋ฅผ ์
๋ ฅํ ์๋ ์๊ณ ๋ค๋ฅธ ๋ฌธ์์ด์ ์
๋ ฅํด๋ ๋๋ค. ์ด๋ ๊ฒ enum
์ผ๋ก ์ ์ํ Role
์ role
ํ์
์ ์ฐธ์กฐํ๊ฑฐ๋, ์ฌ์ฉ์ ์ ์ ํ์
์ ์ฐธ์กฐํ๊ฑฐ๋, ์์ฑํ ์ฌ์ฉ์ ์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์๊ณ ์ด๊ฒ์ enum
์ ๊ฐ์ ์ด๋ผ๊ณ ํ ์ ์๋ค. ์ธ๊ฐ์ด ์ฝ์ ์ ์๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์ ๋งคํ๋ ๊ฐ์ด ์๋ ์๋ณ์๊ฐ ํ์ํ ๋ enum
์ ๊ฐ์ ์ ์ฐ๋ฆฌ๋ ํ์ฉํ ์ ์๋ค.any
ํ์
์ ํ์
์คํฌ๋ฆฝํธ์์ ํ ๋นํ ์ ์๋ ๊ฐ์ฅ ์ ์ฐํ ํ์
์ด๋ค. ์ด ํ์
์ ๋ชจ๋ ์ข
๋ฅ์ ๊ฐ์ ์ ์ฅํ๊ณ , ํ์
๋ฐฐ์ ๋ ๋ฑํ ํ์ํ์ง ์๋ค. ๊ทธ๋ฆฌ๊ณ any
ํ์
์ ์ฌ์ฉํ๋๋ผ๋ ํ์
์คํฌ๋ฆฝํธ์ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.any
๋ ์์ฃผ ์ ์ฐํ๊ณ ํ๋ฅญํ ํ์
์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ด๊ฒ์ด ์ง๋ ํฐ ๋จ์ ๋๋ฌธ์ any
๋ฅผ ๊ฐ๋ฅํ ์ฐ์ง ์์์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๊ฒ ๋ ๊ฒ์ด๋ค. ์๋ํ๋ฉด ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ์ง๊ฒ ๋๋ ๋ชจ๋ ์ฅ์ ์ any
๊ฐ ์์์์ผ ๊ทธ์ ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ๋์ ๋ค๋ฅผ ๋ฐ๊ฐ ์๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค. any
๋๋ any
๋ณ์๊ฐ ์ด๋ค ๊ฐ๋ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ๋ฌ๊ฐ ๊ฒ์ฌํ ๋ถ๋ถ์ด ์์ด์ง๋ค. ๋ฐ๋ผ์ any
๋ฅผ ์ฌ์ฉํด์ผ๋ง ํ๋ ๋ช ๊ฐ์ง ์ด์ ๊ฐ ์์ ๋์๋ง ์ฌ์ฉํด์ผ ํ๋ค. ์ด๋ฅผ ํ
๋ฉด ์ด๋ ํ ๊ฐ์ด๋ ์ข
๋ฅ์ ๋ฐ์ดํฐ๊ฐ ์ด๋์ ์ ์ฅ๋ ์ง ์ ํ ์ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ๊ฑฐ๋, ๋ฐํ์ ๊ฒ์ฌ๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ ๋์ค์ ํน์ ๊ฐ์ ์ํ ํ๋ ์์
์ ๋ฒ์๋ฅผ ์ขํ ๋์๋ง ๋ง์ด๋ค. ๊ทธ์ธ์๋ any
ํ์
์ ๊ฐ๋ฅํ ์ฌ์ฉํ์ง ์๋ ๊ฒ ์ข๋ค.union
ํ์
์ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ๋ค.function combine(input1: number, input2: number) {
const result = input1 + input2;
return result;
}
const combinedAges = combine(30, 26);
console.log(combinedAges); // 56
const combinedNames = combine("Max", "Anna");
console.log(combinedNames); // error !!!!
union
ํ์
์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.function combine(input1: number | string, input2: number | string) {
const result = input1 + input2;
return result;
}
const combinedAges = combine(30, 26);
console.log(combinedAges); // 56
const combinedNames = combine("Max", "Anna");
console.log(combinedNames); // MaxAnna
union
ํ์
์ ์ฌ์ฉํ์ฌ ํ์
์คํฌ๋ฆฝํธ์์ธ ์ซ์๋ ๋ฌธ์์ด ์ค ํ๋๋ฅผ ์ฌ์ฉํด๋ ๊ด์ฐฎ๋ค๋ ๊ฒ์ ์๋ ค์ผ ํ๋ค. ์ด๋ ์ฐ๋ฆฌ๋ ํ์ดํ ๊ธฐํธ|
์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ์
์ ์
๋ ฅํ๋ฉด ๋๋ค. ์ด์ฒ๋ผ ์์์ ๋ ๊ฐ์ง ์ด์์ ํ์
์ด๋ ํน์ ๊ทธ ์ด์์ ํ์
์ ํ์ํ ๋งํผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ํ์ง๋ง ๋ํ๊ธฐ ์ฐ์ฐ์์์๋ '๋ฌธ์์ด'์ด๋ '์ซ์' ํ์
์ ์ ์ฉํ ์ ์๋ค๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ๋ฌผ๋ก ๋ํ๊ธฐ ์ฐ์ฐ์๋ ์ซ์์ ๋ฌธ์์ด ๋ชจ๋ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๋ฌธ์ ๊ฐ ์์ด์ผ ํ์ง๋ง, ๋ํ๊ธฐ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ์
๋ ์์ ๊ฒ์ด๋ผ๊ณ ํ์
์คํฌ๋ฆฝํธ๋ ์ดํดํ๊ณ ์๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๊ฐ๋จํ ๋ฐํ์ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ์ฌ ๋งค๊ฐ๋ณ์๊ฐ ์ซ์ ํ์
์ผ ๋์ ๋ฌธ์์ด ํ์
์ผ ๋๋ฅผ ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ ์ฐ์ฐํ์ฌ ๋ฐํํ ์ ์๋ค.function combine(input1: number | string, input2: number | string) {
let result;
// ๋ฐํ์ ๊ฒ์ฌ ์ถ๊ฐ
if (typeof input1 === "number" && typeof input2 === "number") {
// number type
result = input1 + input2;
} else {
// string type
result = input1.toString() + input2.toString();
}
return result;
}
const combinedAges = combine(30, 26);
console.log(combinedAges); // 56
const combinedNames = combine("Max", "Anna");
console.log(combinedNames); // MaxAnna
union
ํ์
์ ์ฌ์ฉํ์ฌ ์์
ํ ๋์ ์ข
์ข
ํ์ํ ๋ถ๋ถ์ด๋ ๊ธฐ์ตํด๋์.) ์ด์ฒ๋ผ union
ํ์
์ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์ ์ฉํ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณด๋ค ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฅผ ์ฌ์ฉํ์ ๋ ํ์
์ ๋ฐ๋ผ ํจ์ ๋ด์ ๋ค๋ฅธ ๋ก์ง์ ์ ์ฉํ ์ ์์ผ๋ฏ๋ก ํจ์๊ฐ ์ฌ๋ฌ ์ ํ์ ๊ฐ์ผ๋ก ์๋ํ ์ ์๊ฒ ๋๋ค. ๋ฌผ๋ก ํ์
์ ๋ฐ๋ผ ์กฐ๊ธ์ฉ ๋ฌ๋ผ์ง๋ฏ๋ก union
ํ์
์ผ๋ก ์์
ํ ๋ ์์ ๊ฒฝ์ฐ์ฒ๋ผ ์ข
์ข
๋ฐํ์ ๊ฒ์ฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ ์๊ณ , ํ๋ก๊ทธ๋จ์ ๋ฐ๋ผ ๋ฐํ์ ๊ฒ์ฌ๋ฅผ ์ํํ์ง ์์๋ union
ํ์
์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ๋ ์๋ค. ๋จ์ง ๊ตฌ์ฑํ๋ ๋ก์ง์ด ์ด๋ค ์์ด๋์ ๋ฐ๋ผ ๋ฌ๋ฆฐ ๋ฌธ์ ์ด๋ค.function combine(
input1: number | string,
input2: number | string,
resultConversion: "as-number" | "as-text" // ํน์ ๋ฌธ์์ด์ union ํ์
์ผ๋ก ์ง์
) {
let result;
if (
(typeof input1 === "number" && typeof input2 === "number") ||
resultConversion === "as-number"
) {
result = +input1 + +input2; // ์๋ฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ๋ฏธ๋ฆฌ ์ซ์๋ก ๋ณํํ์ฌ ๋ํด์ค.
} else {
result = input1.toString() + input2.toString();
}
return result;
}
// โก๏ธ
type Combinable = number | string;
type ConversionDescriptor = "as-number" | "as-text";
// โก๏ธ
function combine(
input1: Combinable,
input2: Combinable,
resultConversion: ConversionDescriptor
) {
let result;
if (
(typeof input1 === "number" && typeof input2 === "number") ||
resultConversion === "as-number"
) {
result = +input1 + +input2;
} else {
result = input1.toString() + input2.toString();
}
return result;
}
type Combinable = number | string;
type ConversionDescriptor = "as-number" | "as-text";
type User = { name: string, age: number };
const u1: User = { name: "Max", age: 30 }; // this works!
function greet(user: { name: string, age: number }) {
console.log("Hi, I am " + user.name);
}
function isOlder(user: { name: string, age: number }, checkAge: number) {
return checkAge > user.age;
}
type User = { name: string, age: number };
function greet(user: User) {
console.log("Hi, I am " + user.name);
}
function isOlder(user: User, checkAge: number) {
return checkAge > user.age;
}
๐จ ํด๋น ํฌ์คํ ์ Udemy์ Typescript :๊ธฐ์ด๋ถํฐ ์ค์ ํ ํ๋ก์ ํธ๊น์ง with React + NodeJS ๊ฐ์๋ฅผ ๋ฒ ์ด์ค๋ก ํ ๊ธฐ๋ก์ ๋๋ค.
โ๐ป ๊ฐ์ git repo ๋ฐ๋ก๊ฐ๊ธฐ