다른 개발자들이 개발한 API를 사용할 때 기능을 추가하기 위해 사용
// dynamic 타입의 변수에는 Extension method를 사용할 수 없다
dynamic d = '10';
print(d.parseInt()); // 런타임 에러 : NoSuchMethodError
// Extention method는 Dart의 타입 추론을 사용함 -> 아래 v는 String 타입으로 추론되어 정상동작함
var v = '2';
print(v.parseInt()); // 2
-> extension method가 인터페이스나 다른 extension method와 충돌하는 경우(메소드명 동일)
// String 확장 메서드인 parseInt()를 정의하는 라이브러리.
import 'string_apis.dart';
// parseInt()를 정의하는 또다른 라이브러리.
// hide를 사용하여 NumberParsing2의 확장 메서드를 숨깁니다.
import 'string_apis_2.dart' hide NumberParsing2;
// 'string_apis.dart'에 정의된 parseInt()를 사용합니다.
print('42'.parseInt());
// 두 라이브러리 모두 parseInt()를 가지는
// String에 대한 확장을 가지고 있고, 해당 확장들은 다른 이름을 가지고 있습니다.
import 'string_apis.dart'; // Contains NumberParsing extension.
import 'string_apis_2.dart'; // Contains NumberParsing2 extension.
// ···
// print('42'.parseInt()); // 작동하지 않습니다.
print(NumberParsing('42').parseInt());
print(NumberParsing2('42').parseInt());
// 두 라이브러리 모두 parseInt() 확장 메서드를 가지는 NumberParsing 메서드를 가지고 있습니다.
// 'string_apis_3.dart'의 NumberParsingOne 확장도 parseNum()을 가지고 있습니다.
import 'string_apis.dart';
import 'string_apis_3.dart' as rad;
// ···
// print('42'.parseInt()); // Doesn't work.
// string_apis.dart의 ParseNumbers 확장을 사용합니다.
print(NumberParsing('42').parseInt());
// string_apis_3.dart의 ParseNumbers 확장을 사용합니다.
print(rad.NumberParsing('42').parseInt());
// string_apis_3.dart만 parseNum()을 가지고 있습니다.
print('42'.parseNum());
extension <extension name>? on <type> { (<member definition>)* }
extension NumberParsing on String {
int parseInt() {
return int.parse(this);
}
double parseDouble() {
return double.parse(this);
}
}