2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

타입스크립트에서 상속은 어떻게 이루어지나요?

_____
Q1: 타입스크립트에서 클래스 상속은 어떻게 선언하나요?
A1: 타입스크립트에서는 `extends` 키워드를 사용해 클래스 간 상속을 선언합니다. 예를 들어,
```typescript
class Parent {
greet() {
console.log("Hello from Parent");
}
}

class Child extends Parent {
// Child는 Parent의 greet 메서드를 상속합니다.
}
```

Q2: 상속받은 클래스에서 부모 생성자를 호출하려면 어떻게 해야 하나요?
A2: 자식 클래스 생성자에서 `super()`를 호출하여 부모 클래스의 생성자를 실행해야 합니다. 예:
```typescript
class Parent {
constructor(public name: string) {}
}

class Child extends Parent {
constructor(name: string, public age: number) {
super(name); // 부모 생성자 호출
}
}
```

Q3: 메서드 오버라이딩은 어떻게 하나요?
A3: 자식 클래스 내에서 부모 클래스와 동일한 이름의 메서드를 다시 정의하면 오버라이딩 됩니다. 예:
```typescript
class Parent {
greet() {
console.log("Hello from Parent");
}
}

class Child extends Parent {
greet() {
console.log("Hello from Child");
}
}
```

Q4: 부모 클래스 메서드를 오버라이드 하면서 호출하는 방법은?
A4: 자식 클래스 메서드 내에서 `super.메서드명()`을 사용해 부모 메서드를 호출할 수 있습니다. 예:
```typescript
class Parent {
greet() {
console.log("Hello from Parent");
}
}

class Child extends Parent {
greet() {
super.greet(); // 부모 메서드 호출
console.log("Hello from Child");
}
}
```

Q5: 상속받은 프로퍼티는 어떻게 접근하나요?
A5: 부모 클래스의 프로퍼티는 자식 클래스 내에서 `this` 키워드를 통해 접근할 수 있습니다.
```typescript
class Parent {
protected name: string = "Parent";
}

class Child extends Parent {
showName() {
console.log(this.name); // "Parent"
}
}
```

Q6: 타입스크립트에서 다중 상속이 가능한가요?
A6: 클래스는 단일 상속만 지원하며, 다중 상속은 불가능합니다. 하지만 인터페이스를 다중 구현하는 방식으로 유사한 효과를 낼 수 있습니다.
```typescript
interface A { /* ... */ }
interface B { /* ... */ }

class C implements A, B { /* ... */ }
```

Q7: 상속받은 클래스의 접근 제한자 규칙은 어떻게 되나요?
A7:
- `public`: 어디서나 접근 가능
- `protected`: 자식 클래스 및 해당 클래스 내에서만 접근 가능
- `private`: 해당 클래스 내에서만 접근 가능, 자식 클래스에서는 접근 불가

Q8: 추상 클래스를 상속받는 방법은?
A8: 추상 클래스는 `abstract` 키워드를 붙이며, 추상 메서드를 자식 클래스가 반드시 구현해야 합니다. 예:
```typescript
abstract class Animal {
abstract makeSound(): void;
move(): void {
console.log("Moving...");
}
}

class Dog extends Animal {
makeSound() {
console.log("Bark");
}
}
```

Q9: 부모 클래스의 생성자가 없는 경우에도 상속이 가능한가요?
A9: 네, 부모 클래스에 생성자가 없으면 기본 생성자가 자동으로 생성되므로 자식 클래스가 `super()`를 호출하면 문제없이 상속할 수 있습니다.

Q10: 상속과 인터페이스 구현의 차이점은?
A10:
- 상속(`extends`)은 코드 구현을 물려받고 사용할 수 있게 합니다.
- 인터페이스 구현(`implements`)은 클래스가 특정 타입 구조를 만족하도록 강제하는 역할이며, 실제 구현 코드를 제공하지 않습니다.
타입스크립트(TypeScript)에서 상속(Inheritance)은 객체 지향 프로그래밍의 중요한 개념 중 하나로, 기존 클래스의 속성과 메서드를 새로운 클래스에서 재사용할 수 있게 해줍니다.

타입스크립트는 자바스크립트를 기반으로 하므로, 자바스크립트의 프로토타입 기반 상속과 클래스 기반 상속을 모두 지원합니다.

여기서는 클래스 기반 상속에 대해 자세히 설명하겠습니다.

1. 클래스 정의 타입스크립트에서 클래스를 정의하는 기본 문법은 다음과 같습니다: ```typescript class Animal { constructor(public name: string) {} speak() { console.log(`${this.name} makes a noise.`); } } ``` 위의 코드에서 `Animal` 클래스는 `name`이라는 속성을 가지고 있으며, `speak`라는 메서드를 정의하고 있습니다.



2. 상속 상속을 구현하기 위해서는 `extends` 키워드를 사용합니다.

자식 클래스는 부모 클래스의 속성과 메서드를 상속받으며, 필요에 따라 추가적인 속성이나 메서드를 정의할 수 있습니다.

```typescript class Dog extends Animal { speak() { console.log(`${this.name} barks.`); } } ``` 위의 코드에서 `Dog` 클래스는 `Animal` 클래스를 상속받고, `speak` 메서드를 오버라이드(재정의)하여 개의 소리를 출력하도록 변경했습니다.



3. 생성자와 super() 자식 클래스에서 생성자를 정의할 때는 반드시 부모 클래스의 생성자를 호출해야 합니다.

이를 위해 `super()` 함수를 사용합니다.

```typescript class Cat extends Animal { constructor(name: string) { super(name); // 부모 클래스의 생성자 호출 } speak() { console.log(`${this.name} meows.`); } } ``` 위의 `Cat` 클래스는 `Animal` 클래스를 상속받으며, 생성자에서 `super(name)`을 호출하여 부모 클래스의 생성자를 실행합니다.



4. 접근 제어자 타입스크립트는 `public`, `private`, `protected`와 같은 접근 제어자를 지원합니다.

이를 통해 클래스의 속성과 메서드에 대한 접근을 제어할 수 있습니다.

- `public`: 모든 클래스에서 접근 가능 - `private`: 해당 클래스 내에서만 접근 가능 - `protected`: 해당 클래스와 그 자식 클래스에서 접근 가능 ```typescript class Animal { protected name: string; constructor(name: string) { this.name = name; } } class Dog extends Animal { speak() { console.log(`${this.name} barks.`); } } ``` 위의 코드에서 `name` 속성은 `protected`로 선언되어, `Animal` 클래스와 `Dog` 클래스에서 접근할 수 있지만, 외부에서는 접근할 수 없습니다.



5. 다중 상속 타입스크립트는 클래스의 다중 상속을 지원하지 않습니다.

그러나 인터페이스를 사용하여 다중 상속의 효과를 낼 수 있습니다.

여러 인터페이스를 구현하는 클래스를 정의할 수 있습니다.

```typescript interface CanRun { run(): void; } interface CanBark { bark(): void; } class Dog implements CanRun, CanBark { run() { console.log("Dog is running."); } bark() { console.log("Dog barks."); } } ``` 위의 코드에서 `Dog` 클래스는 `CanRun`과 `CanBark` 두 개의 인터페이스를 구현하고 있습니다.



6. 정적 메서드와 속성 정적 메서드와 속성은 클래스의 인스턴스가 아닌 클래스 자체에 속합니다.

상속받은 클래스에서도 정적 메서드와 속성을 사용할 수 있습니다.

```typescript class Animal { static numberOfLegs: number = 4; static getLegs() { return this.numberOfLegs; } } class Dog extends Animal {} console.log(Dog.getLegs()); // 4 ```

7. 타입스크립트에서 상속은 코드의 재사용성을 높이고, 객체 지향 프로그래밍의 원칙을 따르는 데 중요한 역할을 합니다.

클래스와 인터페이스를 통해 상속을 구현함으로써, 더 구조적이고 유지보수하기 쉬운 코드를 작성할 수 있습니다.

상속을 적절히 활용하면 코드의 중복을 줄이고, 기능을 확장하는 데 유용합니다.

작성자: 최지윤 [비회원] | 작성일자: 1년 전 2024-09-10 05:32:09
조회수: 119 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.