본문 바로가기
Dart

[Dart] 언어 기본기 - 인터페이스편

by 가드 2022. 12. 14.
728x90

※ 시작 전 참고사항 : 다트패드테스트 진행

인터페이스(Interfece)

클래스가 구현해야 하는 동작을 지정하는 용도로 사용되는 추상적인 자료형이다. 다른 언어에서는 Interface를 사용하려면 Interface 키워드를 사용하는데 Dart 언어에서는 Interface도 class 키워드를 사용한다.

void main() {
  FantasyBook fantasy = FantasyBook('왕좌의게임');
  fantasy.sayName(); // 책 이름은 왕좌의게임 입니다.
  RomanceBook romance = RomanceBook('루시아');
  romance.sayName(); // 책 이름은 루시아 입니다.
  
  print(fantasy is BookInterfece); // true
  print(fantasy is FantasyBook); // true
  print(fantasy is RomanceBook); // false
  
  print(romance is BookInterfece); // ture
  print(romance is FantasyBook); // false
  print(romance is RomanceBook); // true
}

// interface class 정의
abstract class BookInterfece {
  String name;
  
  BookInterfece(this.name);
  
  void sayName();
}

class FantasyBook implements BookInterfece {
  String name;
  
  FantasyBook(this.name);
  
  void sayName(){
    print('책 이름은 ${name} 입니다.');
  }
}

class RomanceBook implements BookInterfece {
  String name;
  
  RomanceBook(this.name);
  
  void sayName(){
    print('책 이름은 ${name} 입니다.');
  }
}
  • Dart는 Interface 키워드가 없기 때문에 class에 정의해서 사용한다. class만 선언하면 인스턴스화 되기 때문에 방지하기 위해 class 앞에 abstract 키워드로 추상화 선언을 하게 되면 클래스를 인스턴스 생성을 하지 못하게 된다.
  • FantasyBook, RomanceBook 클래스는 implements 키워드를 이용하여 인터페이스를 정의하고 인터페이스에 있는 구조 그대로 구현해야 한다.
  • 상속의 경우에는 속성과 기능을 물려주기 위함이고 인터페이스는 특수한 구조를 강제화 하는 것이다.
  • fantasy 타입 비교 시 BookInterfece 타입이 맞고 FantasyBook 타입도 맞고 RomanceBook 타입은 아니다.
  • romance 타입 비교 시 BookInterfece 타입이 맞고 FantasyBook 타입은 아니고 RomanceBook 타입은 맞다.
300x250

댓글