클래스 인터페이스 상속

김응진·2024년 8월 7일
0

클래스가 인터페이스를 상속받기 전
클래스가 인터페이스를 상속받기 전에는 해당 클래스는 특정 구조나 타입을 강제하지 않습니다. 예를 들어, UserAccount 클래스가 User 인터페이스를 상속받지 않는다면, 클래스 내부의 속성과 메서드는 자유롭게 정의될 수 있습니다.

class UserAccount {
  name: string;
  id: number;
  
  constructor(name: string, id: number) {
    this.name = name;
    this.id = id;
  }
}
```
이 경우, UserAccount 클래스는 name과 id 속성을 가지지만, 이를 반드시 가져야 한다는 강제성은 없습니다.

클래스가 인터페이스를 상속받은 후
클래스가 인터페이스를 상속받으면, 해당 인터페이스에 정의된 구조와 타입을 반드시 따라야 합니다. 인터페이스를 상속받음으로써, 클래스는 인터페이스에 정의된 모든 속성과 메서드를 구현해야 합니다.

```typescript
interface User {
  name: string;
  id: number;
}

class UserAccount implements User {
  name: string;
  id: number;
  
  constructor(name: string, id: number) {
    this.name = name;
    this.id = id;
  }
}
```

# 주요 차이점 요약

타입 강제성:

상속 전: 클래스가 특정 구조를 강제하지 않습니다.
상속 후: 클래스가 인터페이스에 정의된 모든 속성과 메서드를 반드시 구현해야 합니다.
타입 안정성:

상속 전: 클래스의 구조가 변경될 수 있으며, 일관성을 유지하기 어렵습니다.
상속 후: 인터페이스를 통해 클래스의 구조가 명확하게 정의되고 강제되므로, 타입 안정성이 높아집니다.
코드 명확성:

상속 전: 클래스의 구조와 타입을 이해하기 위해서는 전체 코드를 분석해야 할 수 있습니다.
상속 후: 인터페이스를 통해 클래스의 구조를 명확하게 이해할 수 있습니다.
재사용성:

상속 전: 클래스 자체로 재사용성이 낮을 수 있습니다.
상속 후: 인터페이스를 통해 여러 클래스에서 동일한 구조와 타입을 재사용할 수 있습니다.
예시를 통한 이해

상속 전

```typescript
class UserAccount {
  name: string;
  id: number;
  age: number; // 인터페이스에 없는 추가 속성
  
  constructor(name: string, id: number, age: number) {
    this.name = name;
    this.id = id;
    this.age = age;
  }
}
```

여기서는 UserAccount 클래스가 age라는 추가 속성을 가지며, 이는 User 인터페이스와 일치하지 않습니다.

상속 후

```typescript
interface User {
  name: string;
  id: number;
}

class UserAccount implements User {
  name: string;
  id: number;
  
  constructor(name: string, id: number) {
    this.name = name;
    this.id = id;
  }
}
```

이 경우, UserAccount 클래스는 User 인터페이스의 구조를 완전히 따라야 하며, 추가적인 속성이나 메서드는 인터페이스에 정의된 것과 일치해야 합니다.

이처럼 인터페이스를 상속받음으로써 코드의 일관성과 명확성을 유지하고, 타입 안정성을 높일 수 있습니다.
profile
Developer

0개의 댓글