개발(dev)/dart

[dart] dart 기초 (7)

dDong2 2023. 1. 9. 10:49
참고: https://dart.dev/overview + https://nomadcoders.co/

 

✔️ Dart Cascade Notation

 

 

..이라는 operator는 test를 가르키면서 새롭게 데이터를 바꾸는 데에

깔끔한 코드로 변경이 가능하다. 이것을 Cascade Notation이라고 한다.

 

 

또는 다음과 같이 변수를 선언한 것에 class를 생성하고 해당 operator를 사용할 수 있다.

 

 

✔️ Dart Enums

 

개발자들이 실수하지 않을 수 있도록 Enums를 지원하는데,

enum 이라는 키워드를 통해 생성할 수 있다.

 

 

다음과 같이 선언하게 되면,

사용할 단어의 오차없이 ex) bule, rde team 등...

오직 red와 blue만을 받을 수 있기 때문에 안전한 코드가 된다.

 

 

다음과 같이 선언하여 사용하면 되고,

Enum으로 Color, Size 등을 선언하여 주로 사용한다.

 

 

✔️ Dart Abstract Classes

 

abstract class는 객체를 생성할 수 없다.

추상화 클래스는 다른 클래스들이 직접 구현해야 하는 메소드들을

모아놓은 것이라고 할 수 있다.

 

 

Human의 walk라는 메소드를 만드는데 아무것도 구현하지 않는 대신

메소드의 시그니쳐를 정의할 수 있다.

여기서 walk는 void 형이며 void를 반환하는 것이다.

 

이렇게 선언한 메소드는 다른 클래스에서 상속, 확장(extends)할 수 있게 된다.

 

 

해당 Human을 사용할 수 있지만, Player에는 walk 메소드를 구현하지 않아

오류가 나게 되는데 이때 Player에서 walk 메소드를 구현하면 된다.

 

 

이처럼 추상화 클래스는 특정 메소드를 구현하도록 강제하는 기능을

가지고 있으며, 추가 클래스에 extends를 받는다면 원하는 방식으로

해당 메소드를 구현할 수 있게 된다.

 

 

✔️ Dart Inheritance

 

Human이라는 클래스를 extend 하게 되면,

Player에서 name과 같은 프로퍼티들과 메소드를 가져올 수 있다.

단, Human 클래스의 생성자 함수를 호출해야 한다.

 

 

Human의 생성자 함수가 Human에 name이라는 변수를 넣어주기 때문이다.

그래서 Player의 생성자 함수를 만들고,

super 키워드를 통해서 확장한 부모 클래스와 상호작용할 수 있게 만든다.

 

super에 name을 전달해주면 Player에서 선언한 String name이

Human에서 생성한 this.name에 호출되는 것이라고 보면 된다.

 

 

Human도 named argument로 사용하고 싶다면,

괄호와 required 키워드를 추가하고 super에 name은 name이라고 적어주면 된다.

 

밑에 있는 player 변수는 Human 클래스에서 확장되었으므로,

team, name, sayHello()를 사용할 수 있게 된다.

이것이 바로 부모에서 상속받았다라고 할 수 있다.

 

또한, 부모에서 받은 sayHello 함수를 직접 커스터마이징하고 싶다면

@override(대체) 키워드를 통해 다음과 같이 추가할 수 있다.

 

 

super는 확장(상속)한 부모 클래스의 프로퍼티에 접근하거나

메소드를 호출할 수 있게 해준다.

 

가장 중요한 것은 확장한 부모 클래스가 생성자를 포함하고 있는데,

그 클래스를 다른 곳에서 사용하기 위해서는 필요한 값을 전달해야하고

그 부모 클래스의 생성자를 호출해야 한다. ex) super(name: name);

 

 

✔️ Dart Mixins

 

Mixin은 생성자가 없는 클래스를 의미한다.

Human은 생성자가 있는 클래스로 Player 클래스를 만들 때

super를 사용했어야 한다.

 

하지만, Mixin은 생성자가 없는 클래스로 클래스에

프로퍼티들을 추가하거나 할 때 사용하여 매우 유용하다.

 

 

다음과 같이 with 메소드를 통해서 생성자가 없는 클래스를

가져올 수 있게 된다. 한마디로 다른 클래스의 프로퍼티와 메소드를

가져다가 사용하는 것이다. 이는 flutter 혹은 flutter plugin 들을 사용할 때

자주 사용하게 되는 문법이다.

 

 

그러므로 Mixin 클래스들을 하나의 클래스에 단 한번만 사용한다면

의미가 없고 여러 클래스에 재사용 가능하다는 것이 가장 큰 특징이 된다.

마치 밑에 있는 Horse와 Kid처럼 말이다.

 

 

이렇게 mixin 한 메소드 또는 프로퍼티들은 player로 선언한

변수에 사용할 수 있게 된다. team, height, strengthLevel, runQuick을 말이다.

그러므로 with를 사용하기 위해서 생성자가 없는 클래스로 만들어주자.

 

중요한 기초 내용은 마무리 되었다.

이제 flutter 앱을 만들러가보자❗

 

화이팅 💪