추상클래스와 인터페이스 ( abstract class, interface )

nouveau·2023년 12월 5일
0

추상클래스

추상클래스란?

상세 부분이 정의 되지 않은 클래스
상속의 재료로 사용 되는 클래스

// 추상 클래스
abstract class Character {
  String name;
  int hp;
  
  Character(this.name, this.hp);
    
  void run() {
    print('$name이 도망쳤다.');
  }
     
  // 추상 메소드
  void attack(Slime slime); 
}

추상클래스의 제약

추상클래스는 인스턴스화가 금지 돼 있다.

다계층의 추상 상속 구조

인터페이스

인터페이스란?

모든 메소드는 추상 메소드여야 한다.
필드를 가지지 않는다.

abstract interface class Human {
  void speak();
}

인터페이스의 구현

class SeoulCleaningService implements CleaningService {
  
  Coat washCoat(Coat coat) {
    return coat;
  }
  
  
  Shirt washShirt(Shirt shirt) {
    return shirt;
  }
    
  
  Tower washTower(Tower tower) {
    return tower;
  }
}

인터페이스의 효과

같은 인터페이스를 구현한 클래스들은 공통 메소드를 구현하고 있음을 보장.
어떤 클래스가 인터페이스를 구현하고 있다면, 적어도 그 인터페이스에 정의된 메소드를 가지로 있다는 것이 보증 된다.

인터페이스의 특별 취급

다중상속의 효과를 낼 수 있음

class SeoulCleaningService implements CleaningService, Store { ...
  • implements와 extends의 사용방법 정리

정리

상속의 재료를 작성하는 개발자의 입장과 역할

  • 다른 사람이 상속의 재료로 사용할 부모 클래스를 만드는 입장의 개발자도 존재 한다
  • 미래의 개발자가 효율 좋게 안심하고 이용할 수 있는 상속의 재료를 작성하는 것이 그의 사명

추상 클래스

  • 내용이 정의되지 않고 상세정의 미정인 메소드가 있는 클래스는 abstract 를 붙여서 추상메소드로 한다
  • 추상 클래스는 인스턴스화 할 수 없다
  • 추상 클래스와 추상 메소드를 활용한 상속의 재료로서의 부모클래스를 개발하면, 예기치 않은 인스턴스화나 오버라이드의 미 구현의 걱정이 없다

인터페이스

  • 추상 클래스 중에, 기본적으로 추상메소드만 가지고 있는 것을 인터페이스 로서 특별 취급 한다
  • 복수의 인터페이스를 부모로 두는 다중상속 효과가 가능
  • 인터페이스를 부모로 두는 자식 클래스 정의에 implements 를 사용
  • interface 키워드는 Dart 3에 추가되었음

0개의 댓글