타입스크립트에서 인터페이스란 무엇인가요?
_____A1: 인터페이스는 객체의 구조를 정의하는 타입 선언 방식입니다. 즉, 객체가 가져야 할 속성(property)과 메서드(method)의 이름, 타입 등을 명시하여 일종의 계약(contract)을 만듭니다.
Q2: 인터페이스를 사용하는 이유는 무엇인가요?
A2: 인터페이스를 사용하면 코드의 명확성과 재사용성이 높아지고, 개발 중 타입 검사를 통해 오류를 줄일 수 있습니다. 또한, 여러 클래스나 객체가 공통된 구조를 따르도록 강제할 수 있습니다.
Q3: 인터페이스의 기본 문법은 어떻게 되나요?
A3:
```typescript
interface Person {
name: string;
age: number;
greet(): void;
}
```
위처럼 인터페이스 이름을 `interface` 키워드 뒤에 적고, 중괄호 안에 속성과 메서드의 타입을 선언합니다.
Q4: 인터페이스와 타입 별칭(type alias)의 차이는 무엇인가요?
A4: 인터페이스는 주로 객체의 형태를 정의할 때 사용하며 선언 합침(Declaration Merging)이 가능하지만, 타입 별칭은 더 다양한 타입(유니언, 튜플 등)을 정의할 수 있고 선언 합침이 불가능합니다.
Q5: 인터페이스는 클래스에서 어떻게 사용되나요?
A5: 클래스는 `implements` 키워드를 이용해 인터페이스를 구현할 수 있습니다. 이때 인터페이스에 정의된 속성과 메서드를 반드시 구현해야 합니다.
```typescript
interface Person {
name: string;
sayHello(): void;
}
class Student implements Person {
name: string;
constructor(name: string) {
this.name = name;
}
sayHello() {
console.log(`Hello, my name is ${this.name}`);
}
}
```
Q6: 인터페이스에서 선택적 속성(optional properties)은 어떻게 선언하나요?
A6: 속성명 뒤에 물음표(?)를 붙여 선택적으로 만들 수 있습니다.
```typescript
interface Person {
name: string;
age?: number; // age는 있을 수도 있고 없을 수도 있음
}
```
Q7: 인터페이스에서 읽기 전용 속성(readonly properties)은 어떻게 선언하나요?
A7: `readonly` 키워드를 사용하여 속성이 한 번 할당된 후 변경되지 않도록 설정할 수 있습니다.
```typescript
interface Person {
readonly id: number;
name: string;
}
```
Q8: 인터페이스 상속은 어떻게 하나요?
A8: 인터페이스는 `extends` 키워드를 사용해 다른 인터페이스를 상속할 수 있습니다.
```typescript
interface Animal {
eat(): void;
}
interface Dog extends Animal {
bark(): void;
}
```
Q9: 인터페이스로 함수 타입도 정의할 수 있나요?
A9: 네, 가능합니다. 함수 시그니처 형태로 정의할 수 있습니다.
```typescript
interface Add {
(x: number, y: number): number;
}
```
Q10: 인터페이스 선언 합침이란 무엇인가요?
A10: 같은 이름의 인터페이스를 여러 번 선언하면 타입스크립트가 이를 하나로 합쳐서 인터페이스를 확장합니다.
```typescript
interface Box {
height: number;
}
interface Box {
width: number;
}
// Box 인터페이스는 { height: number; width: number } 형태가 됨
```
---
요약하자면, 타입스크립트의 인터페이스는 객체나 클래스가 따라야 할 형태를 명세하는 강력한 타입 시스템 도구이며, 코드를 더 안전하고 명료하게 작성할 수 있도록 돕습니다.
타입스크립트의 주요 특징 중 하나는 인터페이스(Interface)입니다.
인터페이스는 객체의 구조를 정의하는 데 사용되는 강력한 도구로, 코드의 가독성과 유지보수성을 높이는 데 기여합니다.
인터페이스의 정의 인터페이스는 객체가 가져야 할 속성과 메서드의 형태를 정의하는 계약(Contract)입니다.
즉, 인터페이스는 특정 객체가 어떤 속성과 메서드를 포함해야 하는지를 명세합니다.
이를 통해 개발자는 코드의 일관성을 유지하고, 타입 검사를 통해 오류를 사전에 방지할 수 있습니다.
인터페이스의 기본 사용법 인터페이스를 정의하는 기본 문법은 다음과 같습니다: ```typescript interface Person { name: string; age: number; greet(): void; } ``` 위의 예제에서 `Person` 인터페이스는 `name`과 `age`라는 두 개의 속성을 가지며, `greet`라는 메서드를 포함하고 있습니다.
이 인터페이스를 구현하는 객체는 반드시 이 속성과 메서드를 가져야 합니다.
인터페이스의 구현 인터페이스를 구현하는 객체는 다음과 같이 정의할 수 있습니다: ```typescript const user: Person = { name: "Alice", age: 30, greet() { console.log(`Hello, my name is ${this.name}`); } }; ``` 위의 코드에서 `user` 객체는 `Person` 인터페이스를 구현하고 있으며, `name`, `age`, `greet` 메서드를 모두 포함하고 있습니다.
만약 `user` 객체가 이 인터페이스에 정의된 속성이나 메서드를 누락하면 타입스크립트는 컴파일 타임에 오류를 발생시킵니다.
선택적 속성과 읽기 전용 속성 인터페이스에서는 선택적 속성을 정의할 수 있습니다.
선택적 속성은 객체가 해당 속성을 포함할 수도 있고 포함하지 않을 수도 있음을 나타냅니다.
선택적 속성은 속성 이름 뒤에 물음표(`?`)를 추가하여 정의합니다.
```typescript interface Person { name: string; age: number; greet?(): void; // 선택적 메서드 } ``` 또한, 읽기 전용 속성도 정의할 수 있습니다.
읽기 전용 속성은 객체가 생성된 후 변경할 수 없는 속성입니다.
읽기 전용 속성은 `readonly` 키워드를 사용하여 정의합니다.
```typescript interface Person { readonly id: number; name: string; age: number; } ``` 인터페이스의 확장 타입스크립트에서는 인터페이스를 확장할 수 있습니다.
이를 통해 기존 인터페이스에 새로운 속성을 추가하거나, 다른 인터페이스를 기반으로 새로운 인터페이스를 만들 수 있습니다.
```typescript interface Employee extends Person { employeeId: number; } ``` 위의 예제에서 `Employee` 인터페이스는 `Person` 인터페이스를 확장하여 `employeeId`라는 새로운 속성을 추가합니다.
이렇게 하면 `Employee` 인터페이스는 `Person`의 모든 속성과 메서드를 포함하게 됩니다.
함수와 인터페이스 인터페이스는 함수의 타입을 정의하는 데도 사용할 수 있습니다.
함수의 매개변수와 반환 타입을 인터페이스로 정의할 수 있습니다.
```typescript interface GreetFunction { (name: string): void; } const greet: GreetFunction = (name) => { console.log(`Hello, ${name}`); }; ``` 위의 코드에서 `GreetFunction` 인터페이스는 `name`이라는 문자열 매개변수를 받고 반환값이 없는 함수를 정의합니다.
`greet` 변수는 이 인터페이스를 구현하는 함수로 정의되었습니다.
결론 타입스크립트의 인터페이스는 객체의 구조를 정의하고, 코드의 일관성을 유지하며, 타입 검사를 통해 오류를 방지하는 데 중요한 역할을 합니다.
인터페이스를 사용하면 코드의 가독성과 유지보수성을 높일 수 있으며, 대규모 애플리케이션 개발 시 특히 유용합니다.
인터페이스는 선택적 속성, 읽기 전용 속성, 함수 타입 정의 등 다양한 기능을 제공하여 개발자가 보다 명확하고 안전한 코드를 작성할 수 있도록 돕습니다.
작성자:
최현민 [비회원]
| 작성일자: 1년 전
2024-09-10 05:32:07
조회수: 284 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 284 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.