Ted's Codding study

추상 클래스와 추상 메서드 본문

TypeScript

추상 클래스와 추상 메서드

Ted93 2024. 6. 28. 10:48

1. 추상 클래스와 추상 메서드

1-1) 정의

  • 추상 클래스: 인스턴스화 할 수 없고, 하나 이상의 추상 메서드를 포함할 수 있는 클래스
  • 공통의 기능을 정의, 상속을 통해서 해당 기능을 구현하도록 강제하는 틀을 제공
  • abstract 키워드를 사용하여 정의

 

1-2) 추상 메서드

  • 구체적인 구현이 없이 선언만 된 메서드
  • 메서드의 구현이란 로직이 작성되는 부분(중괄호)
  • 파생되는 클래스가 반드시 구현해야 하는 메서드의 틀을 제공
  • 추상 클래스 내에서 abstract 키워드를 사용하여 선언

 

1-3) 추상 클래스 / 추상 메서드 예제

  • 동물 추상 클래스
abstract class Animal {
  // 추상클래스 내에서는 반드시 한 개 이상의 추상 메서드가 정의되어야 함
  // : 그 외에는 다른 일반 메서드와 일반 멤버 변수 정의도 가능
  // 추상 메서드 정의
  // : 중괄호의 로직 구현부가 존재하지 X
  abstract makeSound(): void;

  move() {
    console.log('moving~~~');
  }
}

 

  • 추상 클래스를 상속한 Dog 클래스
class Dog extends Animal {} // Error - 내용은 아래 사진

abstract

  • 추상 클래스를 상속받은 클래스에서는 반드시 추상 메서드를 구현!!
  • 메서드의 로직 {}중괄호를 작성해야 함!!
class Dog extends Animal {
  makeSound(): void {
    console.log('멍멍');
  }
}

const myDog = new Dog();
myDog.makeSound();
myDog.move();

 

2. 인터페이스 구현(Implementing Interfaces)

2-1) 정의

  • 메서드와 속성의 시그니처를 정의하는 구조체
  • 클래스가 특정 기능을 구현하도록 강제, 다형성을 지원

 

2-2) 구현 방법

  • interface 키워드를 사용하여 정의
  • implements 키워드를 사용하여 해당 클래스가 정의된 인터페이스를 구현함을 선언

 

2-3) 인터페이스 예제

  • 인터페이스명도 대괄호 시작
  • I인터페이스명으로 사용
interface IAnimal {
  name: string;
  makeSound(): void;
}

 

  • implements 키워드를 사용하여 Cat 클래스가 정의된 인터페이스를 구현
class Cat implements IAnimal{} // Error - 내용은 아래 사진

implements

'Cat' 클래스가 'IAnimal' 인터페이스를 잘못 구현합니다.
'Cat' 형식에 'IAnimal' 형식의 name, makeSound 속성이 없습니다.

class Cat implements IAnimal {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
  makeSound(): void {
    console.log('냐옹~~');
  }
}

let myCat = new Cat('야옹이');
myCat.makeSound(); // 냐옹~~

 

3. 추상클래스와 인터페이스의 차이점

  • 추상클래스는 클래스의 '이다(is - a)'관계를 나타냄
    상속 받는 하위 클래스가 부모 클래스의 특정 종류로 간주
    EX) '동물' 추상 클래스를 상속받는 '개', '고양이' 클래스

 

  • 인터페이스는 클래스가 '할 수 있는(has - a)'관계를 나타냄
    해당 기능을 할 수 있음에 중점
    EX) '비행 가능' 인터페이스를 구현하는 '새'와 '비행기' 클래스

 

  • 공통점: 확장성과 유지보수성

 

 

노션으로 보고 싶다면?

https://short-echidna-b16.notion.site/88db492529e5495cab988b5239480a9b?pvs=4

 

추상 클래스와 추상 메서드 | Notion

목차

short-echidna-b16.notion.site