๐คทโ๏ธ ํ์ ์คํฌ๋ฆฝํธ๋?
์์ฆ ํ์ ์คํฌ๋ฆฝํธ(typescript)๋ ๊ตญ๋ฃฐ์ฒ๋ผ ํ๋ฐํธ์๋, ๋ฐฑ์๋์์ ๋ง์ด ์ฌ์ฉ๋๋ ์คํ์์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค.
์ ๋ํ ํ์ ์คํฌ๋ฆฝํธ ํ์ฉํ๋ฉฐ ๋์ฑ ์์ ํ๊ณ ์ข์์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ ๋ ธ๋ ฅํฉ๋๋ค.
๋ณธ๋ก ์ผ๋ก ๊ฐ์ ํ์ ์คํฌ๋ฆฝํธ๋ Microsoft์์ ๊ฐ๋ฐํ ์คํ์์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์ํผ์ ์ผ๋ก ์ฆ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ํ์ฅ์๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํ์ฉํ๋ฉฐ ๋ณ์์ ํ์ ์ ์ ์ํ๊ณ ํ๋ก๊ทธ๋๋ฐํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผ๋์ด ์คํํ ์ ์์ต๋๋ค.
[TypeScript] ํ์
์คํฌ๋ฆฝํธ ํ์
์ ์ ๊ณต๋ถํ๊ธฐ
https://cometruedream.tistory.com/125
๐คทโ๏ธ ํ์ ์คํฌ๋ฆฝํธ ์ฌ์ฉํ๋ ์ด์ ?
1. ์ฝ๋์ ๊ฐ๋ ์ฑ ์ ์ ์ง๋ณด์์ฑ ํฅ์
Typescript๋ ์ฝ๋์ ํ์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฝ๋์ ์๋๋ฅผ ๋ช ํํ ์ดํดํ ์ ์๊ฒ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ํจ์์ ๋งค๊ฐ๋ณ์, ๋ฐํ๊ฐ์ ํ์ ์ ๋ช ์ํ์ฌ ํจ์์ ์๋์ ์ฌ์ฉ๋ฐฉ๋ฒ์ ์ฝ๊ฒ ํ์ ํ ์ ์๊ณ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ผ์ ์์ต๋๋ค.
์์
function add(a: number, b: number): number {
return a + b;
}
const result = add(2, 3); //ํ์
์ถ๋ก ์ผ๋ก result ์๋์ผ๋ก number ํ์
์ผ๋ก ์ถ๋ก ํฉ๋๋ค.
2. ์ปดํ์ผ ์์ ์ ์ค๋ฅ ๊ฒ์ถ
Typescript๋ ์ปดํ์ผ ์์ ์ ํ์ ์ค๋ฅ๋ฅผ ๊ฒ์ถํฉ๋๋ค.
์ด๋ ๋ฐํ์์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐฉ์งํ ์ ์๊ฒ ๋์์ฃผ๋ฉฐ ํ๋ก์ ํธ์ ์์ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
์์
function greet(name: string) {
return `Hello, ${name}`;
}
greet(42); //์ปดํ์ผ ์ค๋ฅ greet ํจ์๋ ๋ฌธ์์ด์ ์ธ์๊ฐ์ ๋ฐ์์ ์์ต๋๋ค.
3. ์์ฐ์ฑ๊ณผ ๋ ๋์ ๊ฐ๋ฐ ๋๊ตฌ ์ง์
Typescript๋ ์ฝ๋์ ํ์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฝ๋์ ์๋๋ฅผ ๋ช ํํ ์ดํดํ ์ ์๊ฒ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ํจ์์ ๋งค๊ฐ๋ณ์, ๋ฐํ๊ฐ์ ํ์ ์ ๋ช ์ํ์ฌ ํจ์์ ์๋์ ์ฌ์ฉ๋ฐฉ๋ฒ์ ์ฝ๊ฒ ํ์ ํ ์ ์๊ณ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ผ์ ์์ต๋๋ค.
๐คทโ๏ธ ํ์ ๋ด ๋ก์(Type Narrowing)๋?
ํ์ ๋ด๋ก์์ ํ์ ์คํฌ๋ฆฝํธ์์ ๋ณ์๊ฐ ํน์ ํ์ ์์ ์ ํํ๊ณ ํ์คํ๊ฒ ์๋ ค์ฃผ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ค๋ฌด์์ ํ์ ์ ์๋ฅผ ํ๋ค ๋ณด๋ฉด ์์์น ๋ชปํ๊ฒ ์ฌ๋ฌ ๊ฐ์ง ํ์ ์ ๊ฐ์ง ์ ์๋ ๋ณ์๋ฅผ ํ์ ์๋ฌ๋ฅผ ํผํ๊ธฐ ์ํด์ ์กฐ๊ฑด๋ฌธ์ผ๋ก ํน์ ํ์ ์ผ๋ก ์ขํ๋ฉด์ ์ฝ๋์ ์์ ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ๋์ด๋ ์ค์ํ ๊ธฐ๋ฒ์ ๋๋ค.
ํ์ ๋ด๋ก์ ์ฝ๊ฒ ์ดํดํ๊ธฐ
๐ก" ํ์ ์ ๋ฒ์๋ฅผ ์ขํ๋ฉด ์ฝ๋๊ฐ ๋์ฑ ์์ ํ๋ค"
ํ์ ๋ด ๋ก์(type narrowing) ์์
typeof ๊ตฌ๋ถ ์์
function printValue(value: number | string) {
if (typeof value === 'number') {
console.log(`์ซ์ ๊ฐ: ${value}`);
} else {
console.log(`๋ฌธ์์ด ๊ฐ: ${value}`);
}
}
printValue(42); // ์ซ์ ๊ฐ: 42
printValue("Hello"); // ๋ฌธ์์ด ๊ฐ: Hello
์์ ์์ ์ฒ๋ผ printValue ํจ์์ ๋งค๊ฐ๋ณ์๋ ์ซ์์ ๋ฌธ์์ด์ ํ์ ์ ๊ฐ์ง ์ ์๊ณ typeof ํ์ฉํด์ ๊ฐ์ด ์ซ์์ธ์ง ๋ฌธ์์ด์ธ์ง ํ์ ์ ๋ฒ์๋ฅผ ์ขํ ์ ์์ต๋๋ค.
null ์ฒดํฌ ๊ตฌ๋ถ ์์
function greet(name: string | null) {
if (!name) {
console.log("์ด๋ฆ์ด ์ ๊ณต๋์ง ์์์ต๋๋ค.");
} else {
console.log(`์๋
ํ์ธ์, ${name}!`);
}
}
greet("Alice"); // ์๋
ํ์ธ์, Alice!
greet(null); // ์ด๋ฆ์ด ์ ๊ณต๋์ง ์์์ต๋๋ค.
์์ ์์ ์ฒ๋ผ greet ํจ์์ ๋งค๊ฐ๋ณ์๋ ๋ฌธ์์ด๊ณผ null์ ํ์ ์ ๊ฐ์ง์ ์๊ณ ์กฐ๊ฑด๋ฌธ์ ํ์ฉํด์ ๊ฐ์ด ๋ฌธ์์ด์ธ์ง null์ธ์ง ํ์ ์ ๋ฒ์๋ฅผ ์ขํ ์ ์์ต๋๋ค.
๋ฐฐ์ด ํ์ ๊ตฌ๋ถ ์์
function processItems(items: number[] | string[]) {
if (items.length === 0) {
console.log("๋น ๋ฐฐ์ด์
๋๋ค.");
return;
}
if (typeof items[0] === 'number') {
console.log(`์ซ์ ๋ฐฐ์ด: ${items}`);
} else {
console.log(`๋ฌธ์์ด ๋ฐฐ์ด: ${items}`);
}
}
processItems([1, 2, 3]); // ์ซ์ ๋ฐฐ์ด: 1,2,3
processItems(["a", "b", "c"]); // ๋ฌธ์์ด ๋ฐฐ์ด: a,b,c
์์ ์์ ์ฒ๋ผ ๋ฐฐ์ด์ ์์๊ฐ ์ซ์์ธ์ง ๋ฌธ์์ด์ธ์ง ํ์ ์ ๋ฒ์๋ฅผ ์ขํ์ ์์ต๋๋ค.
๐คทโ๏ธ ๋ง์ง๋ง์ผ๋ก
์ค๋ฌด์์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํ๋ค๋ณด๋ฉด ํ์ ๋ด ๋ก์ ๊ธฐ๋ฒ์ ํ์ฉํด์ ํ์ ์ ๋ฒ์๋ฅผ ์ขํ๊ณ ์ฝ๋์ ์์ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ฌ์ ์ฝ๋์ ํ์ง์ ํฅ์์ํฌ์ ์์ต๋๋ค.
์ฒ์์๋ ํ์ ๋ด๋ก์ ๊ธฐ๋ฒ์ ์ ์ฌ์ฉํ๋์ง์ ๋ํ ์๋ฌธ์ ์ด ์๊ธธ ์ ์์ต๋๋ค.
ํ์ง๋ง ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ํ์ฉํด์ ์ฝ๋์ ํ์ง์ ๋์ด๊ธฐ ์ํด์๋ ์ฌ์ฉํด์ผ ํ๋ ๊ธฐ๋ฒ ์ค์ ํ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์์ ์์ ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๋ฉฐ ํ์ํ ์์ ๋ค์ ๋๋ค.
์์ ์์ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ตํ๊ณ ์๊ธฐ๊ฐ๋ฐ์ ํ๋ฉด ์ข์ ๊ฑฐ ๊ฐ์ต๋๋ค.
์ฌ๋ฐ๋ ์ค๋์ ๋ ๋ณ ์ด์ธ ๋ณด๊ณ ๊ฐ์ธ์!
https://cometruedream.tistory.com/247
https://cometruedream.tistory.com/243
https://cometruedream.tistory.com/242
https://cometruedream.tistory.com/241
https://cometruedream.tistory.com/244
'Node.js & TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
NPM faker-js๋ก ์ค๋ฌด์์ ํ์ฉ๊ฐ๋ฅํ ๊ฐ์ง๋ฐ์ดํฐ ์๋ฒ ๋ง๋ค๊ธฐ (4) | 2024.09.02 |
---|---|
[ํ์ ์คํฌ๋ฆฝํธ] typescript keyof ํน์ ๊ฐ์ฒด ์ ๋์จ ํ์ ๊ธฐ๋ฒ (40) | 2024.07.22 |
๊ฐ๋ฐ์๋ผ๋ฉด ์์์ผํ NVM ๊ฐ๋ & ์ค์น & ์ฌ์ฉ๋ฒ (1) | 2024.04.15 |
GraphQL Express Apollo-Server Mysql ์๋ฒ ๊ตฌ์ถ (12) | 2023.03.29 |
TypeScript type๊ณผ interface์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ (3) | 2022.11.18 |