매개변수와 반환 타입, 선택적·기본·나머지 매개변수, 오버로드와 void·never를 다룬다.
함수 타입
함수는 "무엇을 받아 무엇을 돌려주는가"가 핵심입니다. TypeScript는 매개변수와 반환값에 타입을 붙여, 잘못된 호출을 막고 함수의 의도를 분명히 드러냅니다.
학습 목표
- 매개변수와 반환 타입을 명시할 수 있다.
- 선택적·기본·나머지 매개변수를 사용한다.
- 함수 오버로드를 작성할 수 있다.
void와never의 차이를 이해한다.
매개변수와 반환 타입
각 매개변수에 타입을, 괄호 뒤에 반환 타입을 적습니다.
function greet(name: string): string {
return `안녕, ${name}!`;
}
반환 타입은 추론되므로 생략해도 됩니다. 다만 공개 함수에는 적어 두면 실수로 잘못된 값을 반환하는 것을 막아 줍니다.
화살표 함수도 동일합니다.
const square = (n: number): number => n * n;
선택적 매개변수
? 를 붙이면 생략 가능한 매개변수가 됩니다. 생략하면 undefined 가 됩니다.
function log(message: string, prefix?: string) {
console.log(prefix ? `[${prefix}] ${message}` : message);
}
log('안녕'); // OK
log('안녕', 'INFO'); // OK
⚠️ 주의 — 선택적 매개변수는 항상 필수 매개변수보다 뒤에 와야 합니다.
기본 매개변수
값을 넘기지 않으면 사용할 기본값을 지정할 수 있습니다. 타입은 기본값에서 추론됩니다.
function multiply(a: number, b: number = 2): number {
return a * b;
}
multiply(5); // 10
multiply(5, 3); // 15
나머지 매개변수
개수가 정해지지 않은 인자는 ... 로 배열로 받습니다.
function sum(...numbers: number[]): number {
return numbers.reduce((acc, n) => acc + n, 0);
}
sum(1, 2, 3); // 6
sum(10, 20, 30, 40); // 100
함수 오버로드
입력 형태에 따라 동작·반환 타입이 달라질 때, 오버로드 시그니처로 여러 호출 형태를 선언할 수 있습니다.
function toArray(value: string): string[];
function toArray(value: number): number[];
function toArray(value: string | number): string[] | number[] {
return [value] as string[] | number[];
}
const a = toArray('hi'); // string[]
const b = toArray(42); // number[]
위쪽의 두 줄이 호출자에게 보이는 시그니처이고, 마지막 줄이 실제 구현입니다. 구현 시그니처는 호출에 직접 노출되지 않습니다.
void
void 는 "의미 있는 값을 반환하지 않는다"는 뜻입니다. 콜백이나 부수 효과만 있는 함수에 쓰입니다.
function printLog(msg: string): void {
console.log(msg);
// return 문이 없거나 값 없는 return
}
never
never 는 "절대 정상적으로 끝나지 않는다"는 타입입니다. 항상 예외를 던지거나 무한 루프인 함수가 해당됩니다.
function fail(message: string): never {
throw new Error(message);
}
| 타입 | 의미 |
|---|---|
void | 값을 반환하지 않고 함수가 끝남 |
never | 함수가 정상적으로 끝나지 않음(예외/무한루프) |
💡 TIP —
never는 판별 유니온의 "모든 경우를 처리했는지" 검사(exhaustiveness check)에도 쓰입니다. 6강에서 다시 만나게 됩니다.
요약
- 매개변수마다 타입을, 필요하면 반환 타입도 적는다.
?는 선택적,= 값은 기본 매개변수,...는 나머지 매개변수.- 오버로드로 호출 형태별 시그니처를 분리할 수 있다.
void는 값을 반환하지 않음,never는 정상 종료하지 않음을 뜻한다.
댓글 0
“TypeScript” 강좌에 대한 댓글입니다.