728x90
// Interface
// 다른 언어에서는 Interface 키워드가 있는 경우가 많은데 dart에서는 class 라는 키워드를 사용함
ex 자바는 Interface 키워드 이용 class IdolInterface {
String name; // 실제 인터페이스를 만들때 사용하려는게 아니고 다른 클레스를 만들때
// IdolInterface 를 사용해서 이 선언되어있는 형태를 지킬수 있도록 사용할거임
IdolInterface(this.name);
void sayName();
}
인스턴스란 한마디로 이 규격을 지켜서 클레스를 만들어라라는 방안을 만드는 것임
그래서 실제 안에 기능들이 없어도 됨
인터페이스 이용하는 법
class BoyGroup implements IdolInterface // extends 는 상속이고 implements는 인터페이스 사용 하겠다는것임
{
// 처음 만들때 빨간줄이 뜨는데 인터페이스에서 정의한걸 똑같이 사용해주어야
//사라짐 일종에 강제성을 부여하는거임
String name;
BoyGroup(this.name);
@override
void sayName() {
print("제이름은 $name입니다."); // 여기서는 정의 가능
}
}
그래서 인터페이스를 사용하는 클레스가 사용할 인터페이스에 부합하는 시그니처를 똑같이 만들어줘야 오류 나지 않음
다른 클레스 하나더 인터페이스 사용하는 예시 똑같음
void main(){
BoyGroup bts = new BoyGroup('BTS');
GirlGroup redvelvet = GirlGroup('레드벨벳');
bts.sayName();
redvelvet.sayName();
}
// Interface
// 다른 언어에서는 Interface 키워드가 있는 경우가 많은데 dart에서는 class 라는 키워드를 사용함
class IdolInterface {
String name;
IdolInterface(this.name);
void sayName() { }
}
class BoyGroup implements IdolInterface // extends 는 상속이고 implements는 인터페이스 사용 하겠다는것임
{
// 처음 만들때 빨간줄이 뜨는데 인터페이스에서 정의한걸 똑같이 사용해주어야 사라짐 일종에 강제성을 부여하는거임
String name;
BoyGroup(this.name);
@override
void sayName() {
print("제이름은 $name입니다."); // 여기서는 정의 가능
}
}
class GirlGroup implements IdolInterface{ // GirlGroup 도 똑같음 name 멤버 변수 없거나 그러면 오류남
String name;
GirlGroup(this.name);
@override
void sayName() {
print("제이름은 $name입니다."); // 여기서는 정의 가능
}
}
/*
상속은 : 속성과 기능들을 물려주기 위해서
인터페이스 : 특수한 구조를 강제 하는 것을 말함
*/
인터페이스 인트턴스화 해서 사용하라고 하는게 아닌데 누군가 이렇게 실수 할수도 있음
그럴때 인스턴스화 하는것을 막을수 있음
void main(){
BoyGroup bts = new BoyGroup('BTS');
GirlGroup redvelvet = GirlGroup('레드벨벳');
IdolInterface test = IdolInterface("블랙핑크");
bts.sayName();
redvelvet.sayName();
}
abstract 키워드 쓰면됨 이걸 쓰면 함수 안에 바디 지워도 됨 추상적이기 때문에
abstract class IdolInterface { // abstract : 추상적
String name;
IdolInterface(this.name);
void sayName(); // void sayName() { }
}
abstract 키워드 쓰면 IdolInterface test = IdolInterface("블랙핑크"); 이렇게 사용 못함 즉 인스턴스 못만듬
abstract 일종에 메시지 라고 생각 abstract 붙어있으면 인스턴스화 하지 말아라~~
요건 설계만 한거니까 인스턴스화 ㄴㄴ 하세요~
타입 비교
void main(){
BoyGroup bts = new BoyGroup('BTS');
GirlGroup redvelvet = GirlGroup('레드벨벳');
//IdolInterface test = IdolInterface("블랙핑크");
bts.sayName();
redvelvet.sayName();
print(bts is IdolInterface);
print(bts is BoyGroup);
print(bts is GirlGroup); // 상속 이랑 똑같은 결과가 나옴
print(redvelvet is IdolInterface);
print(redvelvet is BoyGroup);
print(redvelvet is GirlGroup);
}
인스턴스 적용하면 그 인스턴스 타입비교시 true 나옴
전체 코드
void main(){
BoyGroup bts = new BoyGroup('BTS');
GirlGroup redvelvet = GirlGroup('레드벨벳');
//IdolInterface test = IdolInterface("블랙핑크");
bts.sayName();
redvelvet.sayName();
print(bts is IdolInterface);
print(bts is BoyGroup);
print(bts is GirlGroup); // 상속 이랑 똑같은 결과가 나옴
print(redvelvet is IdolInterface);
print(redvelvet is BoyGroup);
print(redvelvet is GirlGroup);
}
// Interface
// 다른 언어에서는 Interface 키워드가 있는 경우가 많은데 dart에서는 class 라는 키워드를 사용함
abstract class IdolInterface { // abstract : 추상적
String name;
IdolInterface(this.name);
void sayName() { }
}
class BoyGroup implements IdolInterface // extends 는 상속이고 implements는 인터페이스 사용 하겠다는것임
{
// 처음 만들때 빨간줄이 뜨는데 인터페이스에서 정의한걸 똑같이 사용해주어야 사라짐 일종에 강제성을 부여하는거임
String name;
BoyGroup(this.name);
@override
void sayName() {
print("제이름은 $name입니다."); // 여기서는 정의 가능
}
}
class GirlGroup implements IdolInterface{ // GirlGroup 도 똑같음 name 멤버 변수 없거나 그러면 오류남
String name;
GirlGroup(this.name);
@override
void sayName() {
print("제이름은 $name입니다."); // 여기서는 정의 가능
}
}
/*
상속은 : 속성과 기능들을 물려주기 위해서
인터페이스 : 특수한 구조를 강제 하는 것을 말함
*/
728x90
'APP > Dart' 카테고리의 다른 글
왜 class를 사용하여 코딩하는걸 OOP 라고 하는가? (0) | 2022.08.16 |
---|---|
dart 객체지향 프로그래밍 generic 이란? (0) | 2022.08.16 |
dart 객체지향프로그래밍 static 키워드란?, 인스턴스에 귀속, 클레스에 귀속된다는 건 무슨 말인가? (0) | 2022.08.16 |
dart 객체지향 프로그래밍 Override란? (0) | 2022.08.16 |
dart 객체지향 프로그래밍 상속 (Inheritance) 눈물주의.. (0) | 2022.08.16 |