[Dart] 상속

HootJem's avatar
Sep 27, 2024
[Dart] 상속
Java 에서도 상속을 사용한다. 상속이란 부모가 가진 상태와 행위를 자식이 물려받는 것이다.
 
버거가 있고 치즈버거는 버거를 상속받는다.
class Buger { Buger() { print("버거 생성됨"); } } class cheeseBurger extends Buger { cheeseBurger() { print("치즈 버거 생성됨"); } } void main() { Buger b1 = cheeseBurger(); }
버거 생성됨 치즈 버거 생성됨
실행 시켜보면 부모 클래스가 먼저 호출된다. super()가 생략되어 있는 것이다.
 
이것을 초기화 하려면
class cheeseBurger extends Buger { String name; cheeseBurger(this.name) : super() { print("치즈 버거 생성됨"); } }
저기서 this.name 해야함
 
class Buger { Buger(String name) { print("버거 생성됨"); } } class cheeseBurger extends Buger { String name; cheeseBurger(this.name) : super(name) { print("치즈 버거 생성됨"); } }
부모에게 값을 넘기려면 이렇게
 
근데 Burger 에 String? name; 을 넣게되면 치즈버거의 name 에 에러가 생긴다.
Dart 에서는 내부에선 행위만 적혀 있어야함. 초기화는 생성자 내부나 이니셜라이즈 로 한다.
 

동적 바인딩

notion image
 

컴포지션

컴포지션(=has)과 상속(=is)의 차이는 is 와 has 의 차이
notion image
초기화 하는 두 가지 방법
후자는 3항 연산자 같은걸로 값을 변경해야 할 때 사용
class Engine { int power = 5000; } class wheel { int count = 4; } class Sonata { Engine e; Sonata(this.e, this.w); // 의존성 주입 }
 

mixin

의존성 주입할 때 쓸 수 있는거 컴포지션 ~~ 할 때
mixin class Engine { int power = 5000; } mixin class wheel { int count = 4; } class Sonata with Engine, wheel {} void main() { Sonata s = Sonata(); print(s.power); print(s.count); }
5000 4
 
 
int n1 = 1; double n2 = 1.0; bool n3 = true; String n4 = '"f","1" ${n1}'; var n5 = 1; // 타입추론 dynamic n6 = "값"; // 오브젝트 타입 dynamic n8 = null; int? n9 = null; class Dog {} Dog? d2 = null; Function? f = null; Function? f2 = () => 1; Function? f3 = () {}; //final 이 들어가는 기준 이 다름 보통 final 들어가면 변수 타입 생략 final int count = 1; void main() { //count = 2; }
Share article

[HootJem] 개발 기록 블로그