다형성

허준호·2025년 6월 27일
0

dart 언어 공부

목록 보기
6/16
post-thumbnail

다형성

어떤 것을 이렇게 부를 수도 저렇게 부를 수도 있는 것

예시

핸들이 있고, 오른 페달이 액셀, 왼쪽이 브레이크인 것 = 차, 그랜저, 버스 …

세부적인 부분 부분은 다르지만, 어쨌든 대충 보면 그냥 차다

특징

  • 추상 클래스는 인스턴스 생성이 불가능하다
  • 하지만, 추상 클래스를 상속받는 하위 클래스로 생성이 가능하다
abstract class Character {
  String name;
  
  Character({required this.name});
}

class Hero extends Character {

	Hero({required super.name});
	
	void attack();
}

Character character = Character(name: '캐릭터'); // 이건 불가능
Character hero = Hero(name: '히어로'); // 이건 가능
  • 생성은 가능하지만, 하위 클래스의 메소드 구현은 불가능하다
abstract class Character {
  String name;
  
  Character({required this.name});
}

class Hero extends Character {

	Hero({required super.name});
	
	void attack();
}

Character hero = Hero(name: '히어로');

hero.attack(); 
// Hero 인스턴스를 생성했지만, 타입을 상위 클래스로 지정했기 때문에
// hero는 Character 객체로 인식된다.
// 따라서, Character 추상 클래스에는 attack() 메소드가 없기 때문에 메소드 호출이 안된다.
  • 오버라이드의 경우, 재정의한 메소드로 인식한다
abstract class Character {
  String name;
  
  Character({required this.name});
  
  void move(){
	  print('캐릭터 이동');
  }
}

class Hero extends Character {

	Hero({required super.name});
	
	
	void move(){
		print('히어로 이동');
	}
}

Character hero = Hero(name: '히어로');

hero.move() // 히어로 이동 출력

타입 변경 방법

  1. as를 사용한 타입 변경
Character character = Hero(name: '히어로');
Hero hero = hero as Hero;
  1. if문으로 타입 확인 후 타입 변경
Character character = Hero(name: '히어로');
if(hero1 is Hero) {
	Hero hero = hero as Hero;
}

장점

  • 서로 다른 타입의 인스턴스들을 공통된 상위 클래스로 묶어 한번에 메소드 실행이 가능하다
profile
후추랑 소금 좋아하는 개발자

0개의 댓글