dev.syw

매개변수와 반환 타입, 선택적·기본·나머지 매개변수, 오버로드와 void·never를 다룬다.

함수 타입

함수는 "무엇을 받아 무엇을 돌려주는가"가 핵심입니다. TypeScript는 매개변수와 반환값에 타입을 붙여, 잘못된 호출을 막고 함수의 의도를 분명히 드러냅니다.

학습 목표

  • 매개변수와 반환 타입을 명시할 수 있다.
  • 선택적·기본·나머지 매개변수를 사용한다.
  • 함수 오버로드를 작성할 수 있다.
  • voidnever 의 차이를 이해한다.

매개변수와 반환 타입

각 매개변수에 타입을, 괄호 뒤에 반환 타입을 적습니다.

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함수가 정상적으로 끝나지 않음(예외/무한루프)

💡 TIPnever 는 판별 유니온의 "모든 경우를 처리했는지" 검사(exhaustiveness check)에도 쓰입니다. 6강에서 다시 만나게 됩니다.

요약

  • 매개변수마다 타입을, 필요하면 반환 타입도 적는다.
  • ? 는 선택적, = 값 은 기본 매개변수, ... 는 나머지 매개변수.
  • 오버로드로 호출 형태별 시그니처를 분리할 수 있다.
  • void 는 값을 반환하지 않음, never 는 정상 종료하지 않음을 뜻한다.

댓글 0

TypeScript” 강좌에 대한 댓글입니다.

댓글을 작성하려면 로그인이 필요합니다.