타입스크립트에서 함수의 타입을 정의하는 방법은 무엇인가요?
_____A1: 함수의 매개변수와 반환값에 타입을 명시하는 방식입니다. 예를 들어,
```typescript
function add(a: number, b: number): number {
return a + b;
}
```
위 코드는 매개변수 `a`와 `b`가 숫자형이며 함수는 숫자를 반환함을 명시합니다.
---
Q2: 함수 타입을 별도로 선언하는 방법은?
A2: 함수 타입을 변수에 할당하는 경우 아래와 같이 작성할 수 있습니다.
```typescript
let multiply: (x: number, y: number) => number;
multiply = (a, b) => a * b;
```
여기서 `(x: number, y: number) => number`가 함수 타입입니다.
---
Q3: 타입 별칭(Type Alias)으로 함수 타입을 정의할 수 있나요?
A3: 네, 가능합니다. 예를 들어
```typescript
type Operation = (a: number, b: number) => number;
const divide: Operation = (x, y) => x / y;
```
`Operation`이라는 이름으로 함수 타입을 정의해 재사용할 수 있습니다.
---
Q4: 인터페이스로 함수 타입을 정의하려면 어떻게 하나요?
A4: 인터페이스에 호출 시그니처(Call Signature)를 써서 정의할 수 있습니다.
```typescript
interface Greeter {
(name: string): string;
}
const sayHello: Greeter = (name) => `Hello, ${name}!`;
```
---
Q5: 옵셔널 매개변수가 있는 함수 타입 정의는 어떻게 합니까?
A5: 매개변수 뒤에 `?`를 붙이면 옵셔널 매개변수가 됩니다.
```typescript
function greet(name: string, age?: number): string {
return age ? `${name} is ${age} years old.` : `${name} is ageless.`;
}
```
---
Q6: 기본값이 있는 매개변수 타입 정의는 어떤가요?
A6: 기본값이 있으면 매개변수는 암시적으로 옵셔널이며 타입도 지정할 수 있습니다.
```typescript
function log(message: string = "Default message"): void {
console.log(message);
}
```
---
Q7: 반환 타입이 없는 함수(즉 void 함수)는 어떻게 표시하나요?
A7: 반환 타입을 `void`로 지정합니다.
```typescript
function printMessage(message: string): void {
console.log(message);
}
```
---
Q8: 가변 인자(rest parameters)의 타입은 어떻게 지정하나요?
A8: 다음과 같이 배열 타입으로 지정합니다.
```typescript
function sum(...numbers: number[]): number {
return numbers.reduce((acc, curr) => acc + curr, 0);
}
```
---
Q9: 제네릭 함수를 타입 정의하려면?
A9: `
```typescript
function identity
return arg;
}
```
---
Q10: 화살표 함수의 타입 정의 방법은?
A10: 변수에 직접 함수 타입을 지정하거나, 인라인으로 매개변수 타입과 반환 타입을 명시합니다.
```typescript
const increment: (n: number) => number = (x) => x + 1;
// 또는
const decrement = (x: number): number => x - 1;
```
---
요약하자면, 타입스크립트에서는 함수 정의 시 매개변수 옆에 타입을 표기하고, 함수명 뒤에 반환 타입을 명시하거나, 함수 타입을 별도의 타입 별칭이나 인터페이스로 정의할 수 있습니다.
함수의 타입을 정의하는 것은 코드의 가독성을 높이고, 런타임 오류를 줄이며, IDE의 자동 완성 기능을 활용하는 데 도움을 줍니다.
아래에서는 타입스크립트에서 함수의 타입을 정의하는 다양한 방법을 자세히 설명하겠습니다.
1. 함수 타입 정의하기 가장 기본적인 방법은 함수의 매개변수와 반환값의 타입을 명시하는 것입니다.
다음은 기본적인 함수 타입 정의의 예입니다.
```typescript function add(a: number, b: number): number { return a + b; } ``` 위의 예에서 `add` 함수는 두 개의 매개변수 `a`와 `b`를 받고, 이들은 모두 `number` 타입이며, 함수는 `number` 타입의 값을 반환합니다.
2. 함수 타입 별칭 사용하기 함수의 타입을 자주 사용해야 할 경우, 타입 별칭을 사용하여 재사용할 수 있습니다.
타입 별칭은 `type` 키워드를 사용하여 정의합니다.
```typescript type MathOperation = (x: number, y: number) => number; const multiply: MathOperation = (a, b) => a * b; ``` 위의 코드에서 `MathOperation`이라는 타입 별칭을 정의하고, 이를 사용하여 `multiply` 함수를 정의했습니다.
3. 인터페이스를 사용한 함수 타입 정의 인터페이스를 사용하여 함수의 타입을 정의할 수도 있습니다.
이는 특히 객체의 메서드로 함수를 정의할 때 유용합니다.
```typescript interface StringOperation { (input: string): string; } const toUpperCase: StringOperation = (str) => str.toUpperCase(); ``` 위의 예에서 `StringOperation` 인터페이스는 문자열을 입력받아 문자열을 반환하는 함수의 타입을 정의합니다.
4. 선택적 매개변수와 기본 매개변수 타입스크립트는 선택적 매개변수와 기본 매개변수를 지원합니다.
선택적 매개변수는 매개변수 이름 뒤에 `?`를 붙여 정의합니다.
```typescript function greet(name: string, greeting?: string): string { return `${greeting || 'Hello'}, ${name}!`; } ``` 위의 예에서 `greeting` 매개변수는 선택적이며, 제공되지 않을 경우 기본값 `'Hello'`가 사용됩니다.
5. 나머지 매개변수 나머지 매개변수(rest parameters)를 사용하면 함수가 가변 개수의 인수를 받을 수 있습니다.
이 경우 매개변수 이름 앞에 `...`를 붙입니다.
```typescript function sum(...numbers: number[]): number { return numbers.reduce((acc, curr) => acc + curr, 0); } ``` 위의 예에서 `sum` 함수는 가변 개수의 숫자를 받아서 그 합을 반환합니다.
6. 반환값이 void인 함수 반환값이 없는 함수는 `void` 타입을 사용하여 정의할 수 있습니다.
```typescript function logMessage(message: string): void { console.log(message); } ``` 위의 예에서 `logMessage` 함수는 문자열을 받아서 콘솔에 출력하지만, 반환값은 없습니다.
7. 제네릭 함수 타입스크립트는 제네릭을 사용하여 다양한 타입을 처리할 수 있는 함수를 정의할 수 있습니다.
제네릭을 사용하면 함수가 다양한 타입에 대해 작동할 수 있습니다.
```typescript function identity
2); const stringIdentity = identity
결론 타입스크립트에서 함수의 타입을 정의하는 방법은 다양하며, 이를 통해 코드의 안정성과 가독성을 높일 수 있습니다.
매개변수와 반환값의 타입을 명시하거나, 타입 별칭, 인터페이스, 제네릭 등을 활용하여 더욱 유연하고 재사용 가능한 코드를 작성할 수 있습니다.
이러한 타입 정의는 코드 작성 시 오류를 사전에 방지하고, 유지보수를 용이하게 만들어 줍니다.
작성자:
이주희 [비회원]
| 작성일자: 1년 전
2024-09-10 05:32:08
조회수: 154 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 154 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.