추상 클래스
추상 클래스는 추상적인 클래스입니다. 추상적이기 때문에 기본적으로 객체를 만들 수 없습니다.
abstract class Animal {
void sound();
}
추상 클래스란? 추상 클래스는 추상 메서드를 가지고 있습니다. 추상 클래스를 사용하는 이유는 수많은 객체를 추상 화하는 공통 부모를 만들 수 있기 때문입니다. 공통 부모를 만들면 어떤 이점이 있을까요?
class Dog {
void sound() {
print('멍멍 배고파');
}
}
class Cat {
void sound() {
print('야옹 배고파');
}
}
void main() {
Dog dog = Dog();
Cat cat = Cat();
Fish fish = Fish();
dog.sound();
cat.sound();
}
밑과 같은 문법이 있다가 팀장님이 물고기가 배고픈것을 추가해라 하셨습니다.
class Dog {
void sound() {
print('멍멍 배고파');
}
}
class Cat {
void sound() {
print('야옹 배고파');
}
}
class Fish {
void hungry() {
print('뻐끔뻐끔 배고파');
}
}
void main() {
Dog dog = Dog();
Cat cat = Cat();
Fish fish = Fish();
dog.sound();
cat.sound();
// fish.sound(); // 오류
}
그리고 팀장님이 뙇 sound 메서드를 호출했는데 어라? 없네?? 이시키 맞아야겠네?? 가 되죠
따라서 이거 써!! 라고 강제성을 추가했다 정도라고 생각하시면 될것 같습니다.
abstract class Animal {
void sound();
}
class Dog implements Animal {
void sound() {
print('멍멍 배고파');
}
}
class Cat implements Animal {
void sound() {
print('야옹 배고파');
}
}
class Fish implements Animal {
@override
void sound() {
print('뻐끔뻐금 배고파');
}
}
void main() {
Dog dog = Dog();
Cat cat = Cat();
Fish fish = Fish();
dog.sound();
cat.sound();
fish.sound();
}
추상 클래스와 인터페이스는 무슨 차이가 있을까
추상 클래스는 인터페이스가 만들어 지기 전에 설계되었다.
추상 클래스는 일반 변수 , 일반 메서드를 가질 수 있다.
다만, 인터페이스는 그럴 수 없다.
( 공통점에 하위 클래스에서 모든 추상메소드를 구현해야한다는 default 는 아닌듯한데.. )
동적 바인딩
다형성이란, 부모 타입으로 자식을 다루는 것을 말한다.
부모 타입으로 자식을 다룰 때, 부모 클래스의 결과가 실행되어야 한다고 생각되지만,
실제로는 자식 클래스의 결과가 실행된다.
이러한 현상을 동적 바인딩이라고 하는데,
동적 바인딩은 런타임 시점에 객체 타입을 기준으로 실행될 함수를 호출하는 것을 말한다.
컴파일 시점에서는 부모 타입을 참조하지만, 런타임 시점에는 객체 타입을 기준으로 호출하여 자식을 호출하는 것이다.
abstract class Animal {
void sound();
}
class Dog implements Animal {
void sound() {
print('멍멍 배고파');
}
}
class Cat implements Animal {
void sound() {
print('야옹 배고파');
}
}
class Fish implements Animal {
@override
void sound() {
print('뻐끔뻐금 배고파');
}
}
void start(Animal a) {
// 동적 바인딩
// Animal 추상 클래스의 sound 함수가 오버라이드(무효화) 되고
// 자식의 Dog, Cat sound 함수가 실행된다.
// 이것을 동적 바인딩이라고 한다.
a.sound();
}
void main() {
start(Dog());
start(Cat());
}
'flutter & dart' 카테고리의 다른 글
flutter & dart - 폰트 (font) (0) | 2024.02.13 |
---|---|
flutter & dart - 컬렉션 (List , Map , Set) (0) | 2024.02.13 |
flutter & dart - 상속 , 다형성 , 이니셜라이져 (0) | 2024.02.06 |
flutter & dart - late , final , const (0) | 2024.02.06 |
flutter & dart - Stateless Widget , Stateful Widget , Scaffold , Children 매개변수와 Child 매개변수 차이 , 위젯 위에 위젯 (0) | 2024.02.02 |