Flutter/Dart 문법

[Dart] 인터페이스(abstract)

Chafle 2023. 3. 22. 15:57
반응형

interface

 

class의 구조를 강제하고 싶을 때 사용한다.

class에서 선언하고 인스턴스로 만들지 않고 다른 클래스에서 사용한다.

implements 키워드를 사용한다.

상속과 비슷하다

 

 

뭔 말인지 모르겠으니 형태를 직접 봐보자

 

 

 

abstract class IdolInterface {
  String name;

  IdolInterface(this.name);

  void sayName() // 메서드를 선언만하고 만들지는 않음 // 함수의 바디( {} ) 도 없어도 된다.
}

쉽게 위처럼 빈 틀이 interface라고 생각하고

틀위에 구현하는 것은 다른 클래스에서 틀에 맞게 구현한다고 생각

 

위 인터페이스는 그야말로 틀(인스턴스로 만들 때 사용하면 안돼)이기 때문에 그 안에 어떤 값도 들어가면 안된다.

 

틀은 변경이나 수정이 되면 안되니까 변경되지 않기 위해 abstract 키워드를 사용한다.

 

함수의 바디( {} ) 도 없어도 된다.





class BoyGroup implements IdolInterface{ // 상속과 비슷하게 extends대신 implements를 사용
 
}

이렇게 작성하고 난 후에 에러를 확인해보면

 

'IdolInterface.sayname', 'getter IdolInterface.name' 및 'setter IdolInterface.name'의 구체적인 구현이 없습니다.

 

구현을 직접 틀에 맞게 (IdolInterface 에 맞게) 구현을 하란다.

 

class BoyGroup implements IdolInterface{
 String name;
  
  BoyGroup(this.name);
  
  void sayName() {
    print('저희는 $name 입니다.');
  }
}
class GirlGroup implements IdolInterface{
   String name;
  
  GirlGroup(this.name);
  
  void sayName() {
    print('저희는 $name 입니다.');
  }
}

 

위처럼 인스턴스를 틀에 맞게 구현해줬다.

 

 

void main() {
  BoyGroup bts = BoyGroup('BTS');
  GirlGroup newJeans = GirlGroup('NEWJEANS');
  
  bts.sayName();
  newJeans.sayName();
}

반응형

'Flutter > Dart 문법' 카테고리의 다른 글

[Dart] 이어진 숫자 분리해서 List/map 적용하기  (0) 2023.03.23
[Dart] Generic  (0) 2023.03.22
[Dart] Static  (0) 2023.03.22
[Dart] 오버라이딩  (0) 2023.03.22
[Dart] 상속  (0) 2023.03.22