다트 3.0에서는 클래스와 믹스인 선언에 적용할 수 있는 몇 가지 새로운 수정자가 추가되었다. 이러한 수정자는 외부의 사용 권한을 제어하게 된다. 이 가이드는 이러한 변경 사항을 설명하여 새로운 수정자를 사용하는 방법과 라이브러리 사용자에게 어떤 영향을 미치는지 알려준다. 클래스에서의 믹스인 수정자가장 중요한 수정자는 mixin이다. 다트 3.0 이전 버전에서는 다음 조건이 없는 한 어떤 클래스도 다른 클래스의 with 절에 믹스인으로 사용할 수 있었다.생성자를 선언하지 않음Object가 아닌 다른 클래스를 확장하지 않음이로 인해, 다른 사람이 with 절에서 해당 클래스를 사용하는 것을 모르고, 클래스에 생성자나 확장을 추가함으로써 다른 사람의 코드르르 실수로 깨뜨릴 수 있다. 다트 3.0에서는 ..
클래스 수정자는 클래스나 믹스인이 어떻게 사용될 수 있는지를 제어하며, 이는 해당 라이브러리 내부와 라이브러리 외부에서 모두 적용된다. 수정자 키워드는 클래스나 믹스인 선언 전에 사용된다. 예를 들어, 추상 클래스를 정의하려면 abstract class가 된다. 클래스 선언 전에 나타날 수 있는 수정자의 전체 목록은 다음과 같다.abstractbasefinalinterfacesealedmixin이 수정자들은 enum, typedef, extension 또는 extension type과 같은 다른 선언에는 사용할 수 없다. 클래스 수정자를 사용할지 여부를 결정할 때는 클래스의 의도된 사용 방법과 클래스가 의존해야 하는 동작을 고려하자. 수정자 없음수정자가 없으면, 어떤 라이브러리에서든 생성할 수 있고 ..
다트 클래스의 인스턴스가 함수처럼 호출될 수 있도록 하려면, call() 메서드를 구현하면 된다. call() 메서드는 해당 메서드를 정의한 클래스의 인스턴스가 함수처럼 동작하도록 해준다. 이 메서드는 매개변수와 반환 타입 등 일반 함수와 동일한 기능을 지원한다. 다음 예제에서 WannabeFunction 클래스는 세 개의 문자열을 받아 공백으로 구분하여 연결하고, 마지막에 느낌표를 추가하는 call() 함수를 정의한다. WannabeFunction의 인스턴스인 wf를 함수처럼 호출하는 것을 확인할 수 있다.class WannabeFunction { String call(String a, String b, String c) => '$a $b $c!';}void main() { var wf = Wann..
확장 타입확장 타입은 기존 타입을 감싸는 컴파일 타임 추상화로, 기존 타입과 다른 정적 전용 인터페이스를 제공한다. 확장 타입은 확장 타입 객체가 사용할 수 있는 연산 또는 인터페이스의 집합(또는 인터페이스)에 대한 규칙을 강제한다. 확장 타입의 인터페이스를 정의할 때, 기존 타입의 일부 멤버를 재사용하거나 생략하거나 대체해서 새로운 기능을 추가할 수 있다. 다음 예제는 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 주석을 사용하여 멤버를 의..