본문 바로가기
Dart

[Dart] 언어 기본기 - 상속편

by 가드 2022. 12. 11.
728x90

상속

일반적으로 부모님에게 상속을 받는다 이런 말과 같다. 부모님의 재산을 자식이 받을 수 있는 것이다.

클래스 개념으로 설명하자면 상속을 받으면 부모 클래스의 모든 속성(필드, 메소드)을 자식 클래스가 부여받는다.

void main() {
  FantasyBook rantasy = FantasyBook('왕좌의게임', 20);
  rantasy.bookName(); // 책 이름은 왕좌의게임 입니다.
  rantasy.bookNo(); // 책 번호는 20 입니다.
  rantasy.categoryName(); // 판타지 소설책입니다.
  
  RomanceBook romance = RomanceBook('루시아', 30);
  romance.bookName(); // 책 이름은 루시아 입니다.
  romance.bookNo(); // 책 번호는 30 입니다.
  romance.categoryName(); // 로맨스 소설책입니다.
  
}

class Book {
  String name;
  int no;
  Book(this.name, this.no);

  bookName() {
    print('책 이름은 ${this.name} 입니다.');
  }

  bookNo() {
    print('책 번호는 ${this.no} 입니다.');
  }
}

class FantasyBook extends Book {
  FantasyBook(String name, int no) : super(name, no);
  
  categoryName() {
    print('책의 카테고리는 판타지입니다.');
  }
}

class RomanceBook extends Book {
  RomanceBook(String name, int no) : super(name, no);
  
  categoryName() {
    print('로맨스 소설책입니다.');
  }
}
  • Book에는 책 이름 name 변수, 책 번호 no 변수와 이름과 번호를 출력해 주는 bookName(), bookNo() 메소드가 작성되어 있다.
  • FantasyBook, RomanceBook은 Book 클래스를 상속받는다. 상속받을 때는 클래스 extends 부모 클래스로 선언해준다. (상속 키워드는 extends)
  • FantasyBook, RomanceBook 생성자 파라미터 name과 no를 부모 클래스에게 전달해야 한다. 생성자 전달은 this가 아니라 super를 써야 한다.
  • main() 함수에서 FantasyBook, RomanceBook 클래스로 생성을 해도 부모인 Book 클래스의 bookName(), bookNo() 메서드들을 그대로 부여받았기 때문에 호출이 가능해진다.
  • FantasyBook, RomanceBook 클래스는 자신이 가진 메서드 categoryName()도 호출이 가능하다. 부모인 Book 클래스는 categoryName()을 사용할 수 없다.

클래스 타입 비교

void main() {
  FantasyBook fantasy = FantasyBook('왕좌의게임', 20);
  RomanceBook romance = RomanceBook('루시아', 30);
  print(fantasy is Book); // true
  print(fantasy is FantasyBook); // true
  print(fantasy is RomanceBook); // false
  
  print(romance is Book); // true
  print(romance is FantasyBook); // false
  print(romance is RomanceBook); // true
}
  • fantasy는 Book 클래스 타입이 맞고 FantasyBook 클래스 타입이 맞고 RomanceBook 클래스 타입이 아니다.
  • romance는 Book 클래스 타입이 맞고 FantasyBook 클래스 타입이 아니며 RomanceBook 클래스 타입이 맞다.

상속받은 클래스는 자기 자신과 부모 클래스 타입이 될 수 있으나 다른 상속 클래스와는 연관이 없다는 걸 알 수 있다.

 

300x250

댓글