Flutter를 개발할 때는 Dart를 사용합니다.
iOS 개발을 오래 했던 저는 Swift가 익숙합니다.
이번에는 Dart와 Swift를 비교하면서 Class의 확장 방법들을 한번 알아보도록 할게요.
Dart에 Class 확장하는 방법 중 abstract, extends, Implements, with 에 대해 알아보도록 하겠습니다.
abstract
abstract는 Swift의 Protocol 과 비슷한 것 같습니다.
인터페이스를 잡아주고, 구체적인 구현은 하지 않는 모습이 비슷하다고 생각했습니다.
Dart
abstract class Vehicle {
void moveForward(int meters);
}
Swift
protocol Vehicle {
func moveForward(meters: Int)
}
https://dart.dev/language/class-modifiers
Class modifiers
Modifier keywords for class declarations to control external library access.
dart.dev
를 보면 interface가 있는데, 무엇이 다른지는 다음에 한번 알아보도록 하겠습니다 :)
(dart 3.5에 나온건가?)
extends
extends 는 상위 클래스를 상속합니다.
Swift에서는 상속할 때 딱히 키워드가 필요 없이, 타입처럼 사용한다고 느꼈었는데요.
이러한 점이 차이가 있는 것 같습니다.
Dart
class Television {
void turnOn() {
_illuminateDisplay();
_activateIrSensor();
}
// ···
}
class SmartTelevision extends Television {
void turnOn() {
super.turnOn();
_bootNetworkInterface();
_initializeMemory();
_upgradeApps();
}
// ···
}
Swift
class Television {
func turnOn() {
illuminateDisplay()
activateIrSensor()
}
private func illuminateDisplay() {
print("Display illuminated")
}
private func activateIrSensor() {
print("IR sensor activated")
}
// ···
}
class SmartTelevision: Television {
override func turnOn() {
super.turnOn()
bootNetworkInterface()
initializeMemory()
upgradeApps()
}
// ···
}
https://dart.dev/language/extend
Extend a class
Learn how to create subclasses from a superclass.
dart.dev
implements
implements는 특정 클래스나 인터페이스의 메서드와 속성을 강제로 재정의 하도록 합니다.
그런데 이러면 extends랑 뭐가 다른가? 라고 생각하실 수 있는데요.
extends는 상속, implements는 인터페이스 라고 생각하시면 될 것 같아요.
추가적으로 extends는 다중 상속이 안되는데 implements는 다중 인터페이스가 됩니다.
abstract 보다 implements를 사용하는 방식이 더 protocol에 가깝다는 생각도 듭니다.
요약하자면
추상 클래스, 상속을 할 때는 공통된 동작을 구현할 때 사용하는게 좋습니다.
인터페이스는 다양한 동작을 정의하고, 다중 구현을 허용할 때 좋습니다.
'Flutter' 카테고리의 다른 글
Flutter - DevTool로 Provider 값 모니터링하기(Feat-DevTool Extension) (0) | 2024.11.21 |
---|---|
Flutter - 플러터의 메모리 관리 (1) | 2024.11.12 |
Flutter - secure_storage || KeyChain 사용법 (feat. Method Channel) (0) | 2024.11.10 |
Flutter State Management - 1. Provider, ChangeNotifier 에 대해 (0) | 2024.11.09 |
Flutter - Build Context란? (1) | 2024.11.08 |