[class] abstract Class

Angela Jeong·2023년 11월 29일

Dart 기초

목록 보기
4/7
post-thumbnail

추상 클래스란?

  • 추상클래스는 함수를 구현해도 되고, 구현하지 않아도 된다.
  • 단, 함수를 구현하지 않았을 경우 상속받은 클래스가 구현하지 않은 함수를 반드시 구현해야 한다. ⇒ 이것을 override라고 한다!
  • 추상클래스에서 함수를 구현한 경우 자식 클래스에서는 반드시 구현하지 않아도 된다.
  • 그런데 구현할 경우 super.함수명()을 통해 부모 클래스에서 구현한 함수를 호출할 수 있다.

예시1)

abstract class Animal {
 void eat();
 void sleep();

// 함수를 구현하지 않은 형태

 void run(){
 print('Animal.run 도망간다'); 
 }
}
// 함수를 구현한 형태

// Animal 추상 클래스 생성

class Dog extends Animal{
 
 void eat() {}

 
 void sleep() {}

 
 void run() {
super.run(); 
 }
}
// Animal을 상속받는 Dog 클래스 생성

void main () {
 Dog myDog = Dog() ;
 myDog.run();
}
// 함수 실행

- Animal의 함수를 상속받기 위해선 override가 필수로 필요하다. - 부모 클래스에서 구현하지 않은 함수는 override가 필수이고, 구현한 함수의 override는 자유이다. - 부모 클래스인 Animal의 run 함수를 호출하기 위해서는 super.함수명();을 꼭 넣어야 한다. - super.run(); 코드를 삭제하면 부모 클래스의 run 구현부는 호출되지 않는다.

예시2)

추상클래스를 사용하여 IronMan Class에 method를 구현하기 ⇒ 참고 “class 생성과 상속”

abstract class IronMan {
String name;
String suitColor;

IronMan(this.name, this.suitColor);

void fly();

void shootLasers();

void withstandDamage();
}
// IronMan class 생성

class Mark50 extends IronMan {
int height;

Mark50(String name, String suitColor, this.height): super(name, suitColor);

 
 void fly() {
 print('$name is flying');
 }

 void shootLasers() {
 print('$name is shooting');
 }

 void withstandDamage() {
 print('$name is defensing');
 }
}
// IronMan class를 상속받은 Mark50 클래스 생성

void main () {
var mark50 = Mark50('Mark50', 'red', 30);

mark50.fly();
mark50.shootLasers();
mark50.withstandDamage();
}
//함수 실행


👉 그럼 추상클래스는 왜 쓸까?

  • 자식 클래스가 추상클래스의 메소드들을 반드시 구현하도록 강제하기 때문!
  • 그렇게 되면 A라는 추상클래스를 상속받은 클래스들은 모두 동일한 형태의 함수를 구현하게 된다.

⇒ 이는 코드의 가독성과 유지보수의 기능을 향상시킴

  • 협업할 때 좋다고 한다. 뼈대를 만들어 놓으면 상속받아서 입맛대로 메소드를 바꿔 쓸 수 있기 때문.

아래 블로그를 참고했다. 감사합니다 😀
https://jinhan38.com/119

0개의 댓글