확장 타입확장 타입은 기존 타입을 감싸는 컴파일 타임 추상화로, 기존 타입과 다른 정적 전용 인터페이스를 제공한다. 확장 타입은 확장 타입 객체가 사용할 수 있는 연산 또는 인터페이스의 집합(또는 인터페이스)에 대한 규칙을 강제한다. 확장 타입의 인터페이스를 정의할 때, 기존 타입의 일부 멤버를 재사용하거나 생략하거나 대체해서 새로운 기능을 추가할 수 있다. 다음 예제는 int 타입을 감싸서 ID 번호에 적합한 연산만 허용하는 IdNumber라는 int의 확장 타입을 생성한다.extension type IdNumber(int id) { // 'int' 타입의 ' id void main() { // 'int'는 ID 번호를 안전하지 않은 연산에 노출시킵니다: int myUnsafeId = 424242..
확장 메서드는 기존 라이브러리에 기능을 추가하는 방법이다. 예를 들어, 다음 코드는 문자열을 정수로 변환하는 코드가 된다.int.parse('42') 이 기능은 String 클래스에 있으면 더 좋을 수 있다. '42'.parseInt() 확장 메서드는 메서드뿐만 아니라 게터, 세터, 그리고 연산자와 같은 다른 멤버도 정의할 수 있다. 다음은 문자열에서 동작하는 확장을 사용하여 parseInt() 확장 메서드를 구현하는 방법이다.// string_apis.dartextension NumberParsing on String { int parseInt() { return int.parse(this); }} string_apis.dart에 만들어 놓은 parseInt를 활성화하려면, 해당 라이브러리..
열거형 타입을 일반적으로 열거형 또는 enums라고 부른다. 열거형 타입은 고정된 수의 상수 값을 나타내기 위해 사용되는 특별한 종류의 클래스이다. 모든 열거형으로 자동으로 Enum 클래스를 상속한다. 또한 열거형은 sealed이므로 확장, 구현, 믹스인으로 사용할 수 없고, 명시적으로 인스턴스화할 수 없다. 단순 열거형 선언단순 열거형 타입을 선언하려면 enum 키워드를 사용하고 열거하려는 값을 나열한다.enum Color { red, green, blue } 열거형 타입을 선언할 때 후행 쉼표를 사용할 수 있다. 후행 쉼표는 상수 값을 복사-붙여 넣기를 할 때, 쉼표를 누락하는 오류를 방지하게 한다.enum Color { red, green, blue, } 확장된 열거형 선언다트에서는 필드,..
믹스인은 여러 클래스 계층에서 재사용할 수 있는 코드를 정의하는 방법이다. 믹스인은 멤버 구현을 대량으로 제공하는 데 사용된다. 믹스인을 사용하려면 with 키워드를 사용해서 하나 이상의 믹스인 이름을 작성한다. 믹스인을 사용하는 클래스는 상속도 다음 예제는 믹스인으로 사용하는 두 클래스를 보여준다.class Musician extends Performer with Musical { // ···}class Maestro extends Person with Musical, Aggressive, Demented { Maestro(String maestroName) { name = maestroName; canConduct = true; }} 믹스인을 정의하려면 mixin 선언을 사용하자. ..
extends를 사용하여 서브 클래스를 만들고 있다. 그리고 super를 사용하여 슈퍼 클래스를 참조할 수 있다.class Television { void turnOn() { _illuminateDisplay(); _activateIrSensor(); } // ···}class SmartTelevision extends Television { void turnOn() { super.turnOn(); _bootNetworkInterface(); _initializeMemory(); _upgradeApps(); } // ···} 멤버 재정의서브 클래스는 인스턴스 메서드(연산자 포함), 게터와 세터를 재정의할 수 있다. @override 주석을 사용하여 멤버를 의..
메서드는 객체에 대한 동작을 제공하는 함수이다. 인스턴스 메서드객체의 인스턴스 메서드는 인스턴스 변수와 this에 접근할 수 있다. 다음 예제의 distanceTo() 메서드는 인스턴스 메서드의 예제이다.import 'dart:math';class Point { final double x; final double y; Point(this.x, this.y); double distanceTo(Point other) { var dx = x - other.x; var dy = y - other.y; return sqrt(dx * dx + dy * dy); }} 연산자연산자는 특수한 이름을 가진 인스턴스 메서드이다. 다트에서는 다음 이름을 가진 연산자를 정의할 수 있다. 참고로 ..
생성자는 클래스의 인스턴스를 생성하는 특별한 함수이다. 다트는 여러 종류의 생성자를 구현할 수 있다. 디폴트 생성자를 제외하고는 일반 생성자 : 새로운 인스턴스를 생성하고 인스턴스 변수를 초기화한다. 일반 생성자는 하나만 정의할 수 있다.디폴트 생성자 : 생성자가 정의되어 있지 않으면 자동으로 만들어지는 생성자이다. 인자를 받지 않으며 이름이 없다.명명된 생성자 : 생성자의 목적을 명확히 할 수 있다. 명명된 생성자는 여러 개를 정의할 수 있다.상수 생성자 : 컴파일 시 상수로 인스턴스를 생성할 수 있게 한다.팩토리 생성자 : 하위 타입의 새 인스턴스를 생성하거나 캐시에서 기존 인스턴스를 반환할 수 있다.재지정 생성자 : 동일한 클래스의 다른 생성자로 호출을 전달한다. 생성자의 종류일반 생성자일반 생..
다트는 클래스와 믹스인 기반 상속을 갖는 객체지향 언어이다. 모든 객체는 클래스의 인스턴스이며, Null을 제외한 모든 클래스는 Obejct에서 상속된다. 믹스인 기반 상속은 모든 클래스(최상위 클래스인 Object를 제외한)가 정확히 하나의 슈퍼 클래스를 갖지만, 클래스 본문은 여러 클래스 계층 구조에서 재사용될 수 있다는 것을 의미한다. 익스텐션 메서드는 클래스를 변경하지 않고 클래스에 기능을 추가하는 방법이다. 클래스 수정자는 라이브러리가 클래스를 서브타입화(subtype)할 수 있는 방법을 제어하는 데 사용된다. 클래스 멤버 사용하기객체는 함수와 데이터로 구성된 멤버를 가진다. 이를 각각 메서드와 인스턴스 변수라고 한다. 메서드를 호출할 때, 해당 메서드는 객체에서 호출되며, 메서드는 해당 객..