Flutter Study Day 5 Dart Inheritance

정정원·2023년 12월 5일
0

Flutter Study

목록 보기
5/17

상속

“이전에 만든 클래스와 닮았지만, 일부 다른 클래스"를 만들 필요가 있을 경우가 늘어날 것이다.

객체지향 프로그래밍에서 상속은 클래스의 멤버를 물려주는 것을 의미한다. 이때 물려주는 쪽을 부모 클래스(혹은 Super class)라고 하고 상속을 받는 쪽을 자식 클래스(혹은 Sub class)라고 한다.

class 부모 class{
	member var;
    member function(){}
}

class 자식 class extends 부모 class{
	
    member fuction(){}
}

상속관계 표현 방법

  • 다중상속은 dart에서 금지!
  • Mixin으로는 구현이 가능하다
  • 올바른 상속은 “is-a 원칙” 이라고 하는 규칙에 따른 상속을 말한다 (SuperHero 는 Hero의 한 종류 이다)
  • 잘못 된 상속은 개념적으로 is-a 관계가 되지 못 함에도 불구하고 상속을 사용한 경우가 “잘못 된 상속" 이다.

상속의 기초

  • extends를 사용하여 기존 클래스를 기초로 하는 새로운 클래스를 정의 할 수 있다.
  • 부모 클래스의 멤버는 자동적으로 자식 클래스에 상속되므로, 자식 클래스에는 추가 된 부분만 기술 하면 된다.
  • 부모 클래스에 있는 메소드를, 자식 클래스에서 재작성 할 경우 이것을 오버라이드 한다고 한다.
  • 올바른 상속이란 “자식 클래스 is-a 부모 클래스"
  • 상속에는 “추상적, 구체적" 관계에 있다는 것을 정의하는 역할도 있음

인스턴스

  • 인스턴스는 내부에 부모클래스의 인스턴스를 가지는 다중구조를 가진다.
  • 보다 외측의 인스턴스에 속하는 메소드가 우선적으로 동작한다.
  • 외측의 인스턴스에 속하는 메소드는 super 을 사용하여 내측 인스턴스의 멤버에 접근할 수 있다.
  • 다중구조의 인스턴스가 생성되는데, 자동적으로 가장 외측 인스턴스의 생성자가 호출 됨
  • 모든 생성자는, “부모 인스턴스의 생성자"를 호출 할 필요가 있다.

override

class SuperHEro extends Hero{
	SuperHero({requierd super.name,required super.hp});
    
  bool _isFlying = false;

  bool get isFlying => _isFlying;

  set isFlying(bool value) {
    _isFlying = value;

    if (value) {
      print('$name 이 날개를 펼쳤다');
    } else {
      print('$name 이 날개를 접었다');
    }
  }
  
  void run() {
    print('$name이 퇴각했다.');
  }
}

상속과 생성자

class Hero{
	Hero({required this.name, required this.hp, this.sword}){
    	print('Hero 클래스의 인스턴스를 생성했습니다.');
  	}
}

class SuperHero extends Hero{
	SuperHero({required super.name, reQuired super.hp}){
    	print('SuperHero 클래스의 인스턴스를 생성했습니다.');
    }
}

void main(List<String> arguments) {
	final superHero = SuperHero(name: '한석봉', hp: 50);
}

구체화와 일반화의 관계

자식클래스 일 수록 구체화 되고,부모 클래스 일 수록 추상적인 것으로 일반화 된다.

0개의 댓글