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
'Dart' 카테고리의 다른 글
[Dart] 언어 기본기 - 제네릭편 (0) | 2022.12.15 |
---|---|
[Dart] 언어 기본기 - Static편 (0) | 2022.12.13 |
[Dart] 언어 기본기 - 오버라이드편 (0) | 2022.12.12 |
[Dart] 언어 기본기 - 상속편 (0) | 2022.12.11 |
[Dart] 언어 기본기 - 클래스편 (1) | 2022.12.10 |
댓글