본문 바로가기
기타개발/Flutter

Dart #7 : Extension method, Enum, Mixin

by 궝테스트 2020. 8. 28.

Dart : https://dart.dev/guides/language/language-tour

 

1. Extension methodes

  • Dart 2.7에 도입되었다
  • IDE에서 코드 완성을 사용하는 경우 일반 메서드와 함께 확장 메서드를 제안한다
  • 사용 방법
    • extension <extension name> on <type> { (<member definition>)* }
// 확장함수
extension NumberParsing on String {
  int parseInt() {
    return int.parse(this);
  }
  // ···
}


// 아래와 같이 사용할 수 있다
import 'string_apis.dart';
...
print('42'.padLeft(5)); // Use a String method.

int.parse('42')
print('42'.parseInt()); // 위와 같지만 이처럼 String 확장함수로 사용 가능

 

2. Enum

  • 고정된 상수의 값들을 열거 타입으로 나타내는데 유용하다
  • enum 키워드를 사용해서 정의한다
  • enum 의 각 값에는 선언에서 0부터 시작하는 위치를 반환하는 인덱스인 getter 가 있다
  • switch 문에서 enum 을 사용 할 수 있다
  • enum 타입에는 다음과 같은 제한이 있다
    • 하위 클래스, mixin 또는 implement 할 수 없다
    • 명시적으로 인스턴스화 할 수 없다
enum Color { red, green, blue }

assert(Color.red.index == 0);
assert(Color.green.index == 1);
assert(Color.blue.index == 2);

// Color.values 로 enum 의 모든 타입들을 List 로 가져올 수 있다
List<Color> colors = Color.values;
assert(colors[2] == Color.blue);

// switch 문
var aColor = Color.blue;

switch (aColor) {
  case Color.red:
    print('Red as roses!');
    break;
  case Color.green:
    print('Green as grass!');
    break;
  default: // Without this, you see a WARNING.
    print(aColor); // 'Color.blue'
}

 

3. Mixins

  • 믹스인은 여러 클래스 계층에서 클래스의 코드를 재사용하는 방법이다
  • with 키워드를 사용하면 상속하지 않고 다른 클래스의 기능을 가져오거나 override 할 수 있다
  • 믹스인을 구현하려면 생성자를 선언하지 않는 클래스를 만든다
  • 믹스인을 일반 클래스로 사용하려면 class 대신 mixin 키워드를 사용한다
    • ex) mixin Musical { ... }
class Musical {
  bool canPlayPiano = false;
  bool canCompose = false;
  bool canConduct = false;

  void entertainMe() {
    ...
  }
}

class Musician extends Performer {
  // ···
}

class Maestro extends Musician
    with Musical, Aggressive, Demented {
  Maestro(String maestroName) {
    name = maestroName;
    canConduct = true;
  }
}
  • 특정 타입만 믹스인을 사용할 수 있도록 지정하려면 (mixin이 정의하지 않은 메서드를 호출 할 수 있도록) on 을 사용하여 필요한 수퍼 클래스를 지정한다
mixin MusicalPerformer on Musician {
  // ···
}

 

'기타개발 > Flutter' 카테고리의 다른 글

Dart #9 : Library  (1) 2020.08.28
Dart #8 : Generics  (0) 2020.08.28
Dart #6 : Abstract, Implicit interface, Extends  (0) 2020.08.28
Dart #5 : Classes, Constructor  (0) 2020.08.28
Dart #4 : if-else, for/while/do-while, switch, exceptions  (0) 2020.08.27

댓글