์ธํ”„๋Ÿฐ ๊ฐ•์˜ - ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (ํ•จ์ˆ˜์™€ ํƒ€์ž…)

2025. 6. 11. 13:33ยท๐Ÿ“‚ Program Language Study/๐Ÿ“„ TypeScript ๊ณต๋ถ€
 

ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TypeScript) ๊ฐ•์˜ | ์ด์ •ํ™˜ Winterlood - ์ธํ”„๋Ÿฐ

์ด์ •ํ™˜ Winterlood | ,   ํ”„๋ก ํŠธ์—”๋“œ์˜ ํ”ผํ•  ์ˆ˜ ์—†๋Š” ๋Œ€์„ธ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ,์ด์ œ๋Š” ์ œ๋Œ€๋กœ ์ •๋ณตํ•  ๋•Œ๊ฐ€ ์™”์Šต๋‹ˆ๋‹ค! ๐Ÿ˜Ž [์‚ฌ์ง„]์ธํ”„์ฝ˜ 2023 'ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์™œ ๊ทธ๋Ÿด๊นŒ?' ๋ฐœํ‘œ์ž์˜ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.   ๐Ÿง ๋ฐฐ์›Œ

www.inflearn.com

 

๐Ÿ“Œ ํ•จ์ˆ˜ ํƒ€์ž…

// โœ… ํ•จ์ˆ˜ ํƒ€์ž… ์ •์˜
// ๋ฐ˜ํ™˜๊ฐ’ ํƒ€์ž…์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž๋™ ์ถ”๋ก  ๊ฐ€๋Šฅ → ์ƒ๋žต ๊ฐ€๋Šฅ
function func(a: number, b: number): number { 
    return a + b;
}

// โœ… ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ํƒ€์ž… ์ •์˜
const add = (a: number, b: number): number => a + b;

// โœ… ๊ธฐ๋ณธ๊ฐ’์ด ์„ค์ •๋œ ๋งค๊ฐœ๋ณ€์ˆ˜
// โ— ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•ญ์ƒ ํ•„์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋’ค์— ์œ„์น˜ํ•ด์•ผ ํ•จ
function introduce(name = "๊ฐ•์—ฐ์ˆ˜", age: number, tall?: number) {
    console.log(`name : ${name}`);

    // ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” undefined์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํƒ€์ž… ์ขํžˆ๊ธฐ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ
    if (typeof tall === 'number') {
        console.log(`tall : ${tall + 10}`);
    }
}

introduce("๊ฐ•์—ฐ์ˆ˜", 24, 160);
introduce("๊ฐ•๋ง๋ฆฌ", 5);

// โœ… ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜ (rest parameter)
function getSum(...rest: number[]) {
    let sum = 0;
    rest.forEach((it) => (sum += it));

    return sum;
}

getSum(1, 2, 3);
getSum(1, 2, 3, 4, 5);

 

๐Ÿ“Œ ํ•จ์ˆ˜ ํƒ€์ž… ํ‘œํ˜„์‹๊ณผ ํ˜ธ์ถœ ์‹œ๊ทธ๋‹ˆ์ณ

// โœ… ํ•จ์ˆ˜ ํƒ€์ž… ํ‘œํ˜„์‹ (Function Type Expression)
// ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ๊ฐ™์€ ํƒ€์ž… ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅผ ๊ฒฝ์šฐ ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ ๊ฐ€๋Šฅ
// ํ•จ์ˆ˜ ๊ตฌํ˜„๊ณผ ํƒ€์ž… ์„ ์–ธ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ
type Operation = (a: number, b: number) => number;

const add: Operation = (a, b) => a + b;
const sub: Operation = (a, b) => a - b;
const multiply: Operation = (a, b) => a * b;
const divide: Operation = (a, b) => a / b;

// โœ… ํ˜ธ์ถœ ์‹œ๊ทธ๋‹ˆ์ฒ˜ (Call Signature)
// ๊ฐ์ฒด ํ˜•ํƒœ์˜ ํƒ€์ž… ์„ ์–ธ ์•ˆ์—์„œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฌธ๋ฒ•
// ํ•จ์ˆ˜ ํƒ€์ž… ํ‘œํ˜„์‹๊ณผ ์—ญํ• ์€ ๊ฐ™์ง€๋งŒ, ๊ฐ์ฒด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€์ ์ธ ์žฅ์  ๋ณด์œ 
type Operation2 = {
    (a: number, b: number): number;
    name: string; // ํ˜ธ์ถœ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ์•ˆ์— ์ผ๋ฐ˜ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด 'ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํƒ€์ž…'์ด ๋จ
};

const add2: Operation2 = (a, b) => a + b;
const sub2: Operation2 = (a, b) => a - b;
const multiply2: Operation2 = (a, b) => a * b;
const divide2: Operation2 = (a, b) => a / b;

 

๐Ÿ“Œ ํ•จ์ˆ˜ ํƒ€์ž…์˜ ํ˜ธํ™˜์„ฑ

// โœ… ํ•จ์ˆ˜ ํƒ€์ž…์˜ ํ˜ธํ™˜์„ฑ
// "์ด ํ•จ์ˆ˜ ํƒ€์ž…์„ ๋‹ค๋ฅธ ํ•จ์ˆ˜ ํƒ€์ž…์ฒ˜๋Ÿผ ์จ๋„ ๊ดœ์ฐฎ์„๊นŒ?"๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€

// โœ… ๊ธฐ์ค€ 1: ๋ฐ˜ํ™˜๊ฐ’ ํƒ€์ž…์ด ํ˜ธํ™˜๋˜๋Š”๊ฐ€?
// โžœ ๋” ๊ตฌ์ฒด์ ์ธ ๊ฐ’(ํ•˜์œ„ ํƒ€์ž…)์€ ๋” ๋„“์€ ๊ฐ’(์ƒ์œ„ ํƒ€์ž…)์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ
type A = () => number;
type B = () => 10;

let a: A = () => 10;
let b: B = () => 10;

a = b; // OK: a()๋Š” ์‹ค์ œ b()๋ฅผ ํ˜ธ์ถœ → ํ•ญ์ƒ 10์„ ๋ฐ˜ํ™˜ํ•˜๋‹ˆ, number๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” a์—๋„ ๋ฌธ์ œ ์—†์Œ
// b = a; // ERROR: b()๋Š” ์‹ค์ œ a()๋ฅผ ํ˜ธ์ถœ → 10์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Œ (์˜ˆ: 999, -1, ๋“ฑ๋“ฑ)

// โœ… ๊ธฐ์ค€ 2: ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ˜ธํ™˜๋˜๋Š”๊ฐ€?
// โžœ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฐ˜๋Œ€๋กœ, "๋” ๋„“์€ ํƒ€์ž…"์„ "๋” ์ข์€ ํƒ€์ž…"์œผ๋กœ ๋Œ€์ž…ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€

// 2-1. ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์„ ๋•Œ
type C = (value: number) => void;
type D = (value: 10) => void;

let c: C = (value) => {};
let d: D = (value) => {};

// c = d; // ERROR: c(20)๋Š” ์‹ค์ œ d(20)๋ฅผ ํ˜ธ์ถœ → d๋Š” 10 ์•„๋‹ˆ๋ฉด ๋ชป ๋ฐ›์•„์„œ ์œ„ํ—˜
d = c; // OK: d(10)๋Š” ์‹ค์ œ c(10)์„ ํ˜ธ์ถœ → c๋Š” number ์ „์ฒด OK, ๋ฌธ์ œ ์—†์Œ

// 2-2. ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ค๋ฅผ ๋•Œ
type Func1 = (a: number, b: number) => void;
type Func2 = (a: number) => void;

let func1: Func1 = (a, b) => {};
let func2: Func2 = (a) => {};

func1 = func2; // OK: func1(1, 2)๋Š” ์‹ค์ œ func2(1)๋ฅผ ํ˜ธ์ถœ → b๋Š” ๋ฌด์‹œ๋˜๋ฏ€๋กœ ๋ฌธ์ œ ์—†์Œ
// func2 = func1; // ERROR: func2(1)๋Š” ์‹ค์ œ func1(1, undefined)๋ฅผ ํ˜ธ์ถœ → b๋Š” ๋ˆ„๋ฝ๋  ์ˆ˜ ์žˆ์–ด ์œ„ํ—˜

 

๐Ÿ“Œ ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ

// โœ… ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ 
// → ํ•˜๋‚˜์˜ ํ•จ์ˆ˜ ์ด๋ฆ„์œผ๋กœ, ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜๋‚˜ ํƒ€์ž…์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๋ฒ„์ „์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹
// ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ง€์› X, ์˜ค์ง ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋งŒ ์ง€์›

// ์˜ค๋ฒ„๋กœ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜: "์ด๋Ÿฐ ๋ฒ„์ „์ด ์กด์žฌํ•ด!"๋ผ๊ณ  ์„ ์–ธ๋งŒ ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„
function func(a: number): void;
function func(a: number, b: number, c: number): void;

// ๊ตฌํ˜„ ์‹œ๊ทธ๋‹ˆ์ฒ˜: ์‹ค์ œ ํ•จ์ˆ˜ ๊ตฌํ˜„
function func(a: number, b?: number, c?: number) {
    if (typeof b === 'number' && typeof c === 'number') {
        console.log(a + b + c);
    } else {
        console.log(a * 20);
    }
};

 

๐Ÿ“Œ ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž… ๊ฐ€๋“œ

// โœ… ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…๊ฐ€๋“œ
type Dog = {
    name: string;
    isBark: boolean;
};

type Cat = {
    name: string;
    isScratch: boolean;
};

type Animal = Dog | Cat;

// ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…๊ฐ€๋“œ
function isDog(animal: Animal): animal is Dog { // animal is Dog: ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” animal์„ Dog๋กœ ๊ฐ„์ฃผ
    return (animal as Dog).isBark !== undefined;
}

function isCat(animal: Animal): animal is Cat { // animal is Cat: ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” animal์„ Cat์œผ๋กœ ๊ฐ„์ฃผ
    return (animal as Cat).isScratch !== undefined;
}

// ํƒ€์ž… ๊ฐ€๋“œ๋ฅผ ํ™œ์šฉํ•ด Animal์˜ ํƒ€์ž…์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ขํ˜€ ์‚ฌ์šฉ
function warning(animal: Animal) {
    if (isDog(animal)) {
        console.log("์†Œ์Œ ์ฃผ์˜")
    } else if (isCat(animal)) {
        console.log("๋ถ€์ƒ ์ฃผ์˜")
    }
}

 

โฌ‡๏ธ ๋‹ค์Œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ 

 

์ธํ”„๋Ÿฐ ๊ฐ•์˜ - ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (์ธํ„ฐํŽ˜์ด์Šค)

ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TypeScript) ๊ฐ•์˜ | ์ด์ •ํ™˜ Winterlood - ์ธํ”„๋Ÿฐ์ด์ •ํ™˜ Winterlood | , ํ”„๋ก ํŠธ์—”๋“œ์˜ ํ”ผํ•  ์ˆ˜ ์—†๋Š” ๋Œ€์„ธ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ,์ด์ œ๋Š” ์ œ๋Œ€๋กœ ์ •๋ณตํ•  ๋•Œ๊ฐ€ ์™”์Šต๋‹ˆ๋‹ค! ๐Ÿ˜Ž [์‚ฌ์ง„]

isliife2.tistory.com

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ“‚ Program Language Study > ๐Ÿ“„ TypeScript ๊ณต๋ถ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ธํ”„๋Ÿฐ ๊ฐ•์˜ - ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (ํด๋ž˜์Šค)  (0) 2025.06.11
์ธํ”„๋Ÿฐ ๊ฐ•์˜ - ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (์ธํ„ฐํŽ˜์ด์Šค)  (0) 2025.06.11
์ธํ”„๋Ÿฐ ๊ฐ•์˜ - ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ดํ•ดํ•˜๊ธฐ)  (0) 2025.06.09
์ธํ”„๋Ÿฐ ๊ฐ•์˜ - ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ)  (0) 2025.06.08
์ธํ”„๋Ÿฐ ๊ฐ•์˜ - ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (๊ฐ•์˜ ์†Œ๊ฐœ ๋ฐ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ก )  (0) 2025.06.07
'๐Ÿ“‚ Program Language Study/๐Ÿ“„ TypeScript ๊ณต๋ถ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ์ธํ”„๋Ÿฐ ๊ฐ•์˜ - ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (ํด๋ž˜์Šค)
  • ์ธํ”„๋Ÿฐ ๊ฐ•์˜ - ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (์ธํ„ฐํŽ˜์ด์Šค)
  • ์ธํ”„๋Ÿฐ ๊ฐ•์˜ - ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ดํ•ดํ•˜๊ธฐ)
  • ์ธํ”„๋Ÿฐ ๊ฐ•์˜ - ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ)
YeonSu02
YeonSu02
Email : rkddustn2519@naver.com
  • YeonSu02
    IsLiife2
    YeonSu02
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
      • ๐Ÿ“‚ Computer Science
      • ๐Ÿ“‚ Unity Engine Study
        • ๐Ÿ“„ Unity ์ธํ”„๋Ÿฐ ๊ฐ•์˜
        • ๐Ÿ“„ Unity ์œ ํŠœ๋ธŒ ๊ฐ•์˜
        • ๐Ÿ“„ Unity ์ฐธ๊ณ 
        • ๐Ÿ’ป Game Development
      • ๐Ÿ“‚ Quality Assurance Study
        • ๐Ÿ”ฅ ์—˜๋ฆฌ์Šค SW QAํŠธ๋ž™
        • ๐Ÿ“„ QA ๊ณต๋ถ€
        • ๐Ÿ“š QA ์ฑ… ๋ฆฌ๋ทฐ
      • ๐Ÿ“‚ Program Language Study
        • ๐Ÿ“„ C# ๊ณต๋ถ€
        • ๐Ÿ“„ ํŒŒ์ด์ฌ ๊ณต๋ถ€
        • ๐Ÿ“„ JavaScript ๊ณต๋ถ€
        • ๐Ÿ“„ TypeScript ๊ณต๋ถ€
      • ๐Ÿ“‚ Additional Study
        • ๐Ÿ“„ Git
        • ๐Ÿ“„ Docker
        • ๐Ÿ“„ Jenkins
        • ๐Ÿ“„ Firebase
        • ๐Ÿ“„ License
      • ๐Ÿ“‚ Experience
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์—˜๋ฆฌ์ŠคํŠธ๋ž™
    ์ •์ฒ˜๊ธฐ ์‹ค๊ธฐ
    ์ •์ฒ˜๊ธฐ ๋…ํ•™
    ํ…Œ์ŠคํŒ…์ž๊ฒฉ์ฆ
    ์ปดํ“จํ„ฐํ™œ์šฉ๋Šฅ๋ ฅ
    ์ปดํ™œ
    ์ •์ฒ˜๊ธฐ ํ•„๊ธฐ
    ๋ถ€ํŠธ์บ ํ”„ ์ถ”์ฒœ
    qa ์ฑ… ๋ฆฌ๋ทฐ
    ๊ตญ๋น„๋ถ€ํŠธ์บ ํ”„ ์ถ”์ฒœ
    qa ๊ฐ•์˜
    qa ์ง๋ฌด ๊ต์œก
    qa ์ฑ…
    ์—‘์…€
    istqb-ctfl
    QA
    ์—˜๋ฆฌ์ŠคํŠธ๋ž™ ํ›„๊ธฐ
    qa์ž๊ฒฉ์ฆ
    ์ž๊ฒฉ์ฆ
    qa ๋ถ€ํŠธ์บ ํ”„
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
YeonSu02
์ธํ”„๋Ÿฐ ๊ฐ•์˜ - ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (ํ•จ์ˆ˜์™€ ํƒ€์ž…)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”