타입스크립트에서 커스텀 타입을 만드는 방법은 무엇인가요?
_____A1: 커스텀 타입은 개발자가 특정 데이터 구조나 값을 표현하기 위해 직접 정의하는 사용자 지정 타입을 말합니다. 기본 타입(number, string 등) 외에 더 구체적이고 의미 있는 타입을 만들 때 사용합니다.
Q2: 타입스크립트에서 커스텀 타입을 만드는 기본 방법은 무엇인가요?
A2: 커스텀 타입을 만드는 기본 방법은 `type` 별칭 혹은 `interface`를 사용하는 것입니다.
- `type` 별칭 사용 예:
```typescript
type UserID = string | number;
```
- `interface` 사용 예:
```typescript
interface User {
id: UserID;
name: string;
}
```
Q3: `type`과 `interface`의 차이점은 무엇인가요?
A3:
- `type`은 원시값, 유니온, 튜플 등 다양한 타입을 별칭으로 정의할 수 있습니다.
- `interface`는 주로 객체의 구조를 정의하는 데 사용되며, 선언 병합과 상속이 가능합니다.
전체적으로 `interface`는 객체 타입에 특화돼 있고, `type`은 훨씬 더 유연합니다.
Q4: 유니온 & 인터섹션 타입으로 커스텀 타입을 만드는 방법은?
A4:
- 유니온 타입(`|`): 여러 타입 중 하나를 가질 수 있도록 지정
```typescript
type Status = "success" | "error" | "loading";
```
- 인터섹션 타입(`&`): 여러 타입을 모두 만족해야 하는 타입
```typescript
type Person = { name: string } & { age: number };
```
Q5: 튜플 타입을 커스텀 타입으로 만드는 법은?
A5:
```typescript
type NameAge = [string, number];
```
Q6: 제네릭 타입을 커스텀 타입으로 만들 수 있나요?
A6: 네, 가능합니다. 예:
```typescript
type Response
data: T;
error?: string;
};
```
Q7: 커스텀 타입을 확장할 수 있나요?
A7:
- `interface`는 `extends` 키워드를 통해 쉽게 확장 가능합니다.
interface Animal {
name: string;
}
interface Dog extends Animal {
bark(): void;
}
```
- `type`은 인터섹션(`&`)을 통해 확장할 수 있습니다.
```typescript
type Animal = { name: string };
type Dog = Animal & { bark(): void };
```
Q8: 커스텀 타입에 Readonly나 Optional 속성을 줄 수 있나요?
A8:
- Optional 속성은 타입 멤버 이름 뒤에 `?`를 붙입니다.
```typescript
type User = {
id: number;
name?: string; // 선택 속성
};
```
- Readonly는 `readonly` 키워드를 멤버 앞에 붙입니다.
```typescript
type User = {
readonly id: number;
name: string;
};
```
Q9: 타입 별칭으로 리터럴 타입 정의도 가능한가요?
A9: 네, 특정 값만 허용하는 리터럴 타입도 가능합니다.
```typescript
type Direction = "up" | "down" | "left" | "right";
```
Q10: 커스텀 타입을 만드는 간단한 예시를 알려주세요.
A10:
```typescript
type Point = {
x: number;
y: number;
};
interface User {
id: number;
name: string;
location?: Point;
}
```
---
요약하자면, 타입스크립트에서 커스텀 타입을 만들려면 `type` 또는 `interface`를 사용하며, 유니온, 인터섹션, 튜플, 제네릭, 선택 및 읽기 전용 속성 등을 활용해 다양한 형태로 상세하게 타입을 정의할 수 있습니다.
타입스크립트에서 커스텀 타입을 만드는 방법은 여러 가지가 있으며, 이를 통해 개발자는 자신의 애플리케이션에 맞는 타입을 정의하고 사용할 수 있습니다.
아래에서는 커스텀 타입을 만드는 다양한 방법에 대해 자세히 설명하겠습니다.
1. 인터페이스(Interface) 인터페이스는 객체의 구조를 정의하는 데 사용됩니다.
인터페이스를 사용하면 객체가 가져야 할 속성과 메서드를 정의할 수 있습니다.
```typescript interface User { id: number; name: string; email: string; } const user: User = { id: 1, name: "John Doe", email: "[email protected]" }; ``` 위의 예제에서 `User`라는 인터페이스를 정의하고, 이를 사용하여 `user` 객체를 생성했습니다.
2. 타입 별칭(Type Alias) 타입 별칭은 특정 타입에 이름을 붙이는 방법입니다.
인터페이스와 유사하지만, 더 다양한 타입을 정의할 수 있습니다.
```typescript type Point = { x: number; y: number; }; const point: Point = { x: 10, y: 20 }; ``` 타입 별칭은 객체뿐만 아니라 배열, 유니온 타입, 튜플 등 다양한 형태의 타입을 정의할 수 있습니다.
3. 유니온 타입(Union Types) 유니온 타입은 여러 타입 중 하나를 허용하는 타입입니다.
이를 통해 변수가 여러 타입을 가질 수 있도록 할 수 있습니다.
```typescript type ID = number | string; const userId1: ID = 123; const userId2: ID = "abc123"; ``` 위의 예제에서 `ID`는 숫자 또는 문자열을 가질 수 있는 타입으로 정의되었습니다.
4. 제네릭(Generic) 제네릭은 타입을 매개변수로 받아 다양한 타입에 대해 재사용할 수 있는 구조를 제공합니다.
이를 통해 코드의 유연성과 재사용성을 높일 수 있습니다.
```typescript function identity
2); const result2 = identity
5. 열거형(Enum) 열거형은 특정 값 집합에 이름을 붙여 사용할 수 있는 타입입니다.
주로 상수 값을 정의할 때 유용합니다.
```typescript enum Direction { Up, Down, Left, Right } const move: Direction = Direction.Up; ``` 위의 예제에서 `Direction` 열거형을 정의하고, `move` 변수를 통해 방향을 나타내는 상수를 사용했습니다.
6. 교차 타입(Intersection Types) 교차 타입은 여러 타입을 결합하여 새로운 타입을 만드는 방법입니다.
이를 통해 여러 인터페이스나 타입을 조합할 수 있습니다.
```typescript interface Person { name: string; age: number; } interface Employee { employeeId: number; } type EmployeeDetails = Person & Employee; const employee: EmployeeDetails = { name: "Alice", age: 30, employeeId: 12345 }; ``` 위의 예제에서 `EmployeeDetails`는 `Person`과 `Employee` 인터페이스를 결합하여 새로운 타입을 정의했습니다.
7. 타입 가드(Type Guards) 타입 가드는 런타임에 변수의 타입을 확인하고, 해당 타입에 따라 다른 로직을 수행할 수 있도록 하는 방법입니다.
```typescript function log(value: string | number) { if (typeof value === "string") { console.log("String value:", value); } else { console.log("Number value:", value); } } ``` 위의 예제에서 `log` 함수는 입력된 값의 타입에 따라 다른 로그를 출력합니다.
결론 타입스크립트에서 커스텀 타입을 만드는 방법은 다양하며, 이를 통해 개발자는 자신의 애플리케이션에 맞는 타입을 정의하고 사용할 수 있습니다.
인터페이스, 타입 별칭, 유니온 타입, 제네릭, 열거형, 교차 타입, 타입 가드 등을 적절히 활용하면 코드의 가독성과 유지보수성을 높일 수 있습니다.
이러한 기능들을 잘 활용하여 타입스크립트의 장점을 최대한으로 이끌어내는 것이 중요합니다.
작성자:
정우성 [비회원]
| 작성일자: 1년 전
2024-09-10 05:32:14
조회수: 246 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 246 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.