Flutter Study Day 6 Dart polymorphism

정정원·2023년 12월 6일
0

Flutter Study

목록 보기
8/17

다형성

어떤 것을 이렇게도 볼 수 있고, 저렇게도 볼 수 있는 것
ex) 핸들이 있고, 오른 페달이 액셀, 왼쪽이 브레이크인 것 = 차, 그랜저, 버스 …
세부적인 부분 부분은 다르지만, 어쨌든 대충 보면 그냥 '차'다

객체지향의 꽃 이라고 불리는 다형성이란 동일한 인터페이스나 추상클래스를 구현했지만 타입이 다양한 객체를 동일하게 다룰 수 있게 해주는 능력이다.

house.draw()

dog.draw()

car.draw()

위 처럼 공통 메소드를 통합 시켜준다.

Interface 정의

abstract interface class Drawable {
	void draw();
}

Interface 구현

class House implements Drawable {
	void draw() {
		...
	}
}

다형성 활용방법

Drawable d = elements[i];
d.draw();

선언을 상위 개념으로 인스턴스 생성은 하위 개념으로 한다.
추상적인 선언 = new 상세 정의

// 두번째 Interface
abstract interface class Moveable {
	void move(int seconds);
}

class Car implements Drawable, Moveable
class Hero extends Character{
	Hero(super.name, super.hp);
    
    
    void attack(Monster monster){
    	print('$name이 $monster을 공격했다.');
        print('10의 데미지');
        monster.hp -= 10;
    }
}

다형성 실패

Character character = Hero('홍길동', 100); //OK
Sword sword = Hero('name, 100'); // NG

정리

  • 상속에 의한 is-a 관계가 성립한다면, 인스턴스를 부모 클래스 타입의 변수에 대입할 수 있다

  • 부모 클래스 타입 변수에 대입하는 것으로, 퉁 칠 수 있음

  • 어떤 멤버를 이용할 수 있는가는 상자의 타입이 결정한다

  • 멤버가 어떻게 움직이는지는 내용의 타입이 결정한다

  • as 키워드를 사용하여 타입 캐스팅을 수행한다

  • is 키워드를 사용하여 타입을 검사할 수 있다

  • 같은 부모를 가지는 다른 인스턴스를 동일시하여, 부모 클래스 타입의 에 담을 수 있다

  • 마찬가지로, 부모 클래스 타입의 인수나 리턴 값을 이용하여, 다른 클래스를 모아서 처리 가능

  • 동일시 취급 해도, 각각의 인스턴스는 각 클래스의 정의를 따르고 다른 동작을 한다.

0개의 댓글