반응형
Extension Method
Dart에서 제공하는 기능인 Extension Method는 특정 타입에 대한 전용 메소드를 만들어주는 기능이다. 이를 이용해 해당 데이터 타입에서 자주 사용되는 동작을 호출해 주는 메소드를 지정해 줄 수 있다. 아래와 같은 측면에서 Extension Method 사용을 고려해 보면 좋다.
- 가독성 향상
- 휴먼 에러 감소
- 유지보수성 개선
- 코드 재사용성 증대
- 코드 중복 감소
다만 지나치게 남용할 경우 오히려 너무 기능이 세분화되거나 코드 간 의존성이 높아질 수 있어 사용에 유의하여야 한다.
나는 프로젝트 구현시 Extension Method를 DateTime formatting을 위해 사용하거나 Enum Type에 대한 객체를 생성해 두고 요소별로 분기처리를 수행할 때 주로 사용하는 것 같다.
1. Basic
먼저 기본 제공되는 데이터 타입에 대한 Extension 예제이다.
extension StringExtension on String {
int parseInt() {
return int.parse(this);
}
double ceilToDouble() {
return double.parse(this).ceilToDouble();
}
}
void main() {
print('1234'.parseInt()); // 1234
print('16.0564'.ceilToDouble()); // 17
}
2. enum
다음은 개인적으로 자주 사용하는 enum(열거형)에 대한 Extension 응용 예제이다.
enum DataCategory {
CO2,
PM25,
TEXT,
CAMERA,
AUDIO,
NOT_USED
}
extension DataCategoryExtension on DataCategory {
String getDisplayName() {
switch (this) {
case DataCategory.CO2:
return '이산화탄소';
case DataCategory.PM25:
return '초미세먼지';
case DataCategory.TEXT:
return '뉴스기사';
case DataCategory.CAMERA:
return 'mp4';
case DataCategory.AUDIO:
return 'mp3';
default:
throw UnimplementedError('There is no DataCategory');
}
}
}
void main() {
DataCategory data = DataCategory.PM25;
print(data.getDisplayName()); // 초미세먼지
}
3. DateTime
마지막으로 DateTime에 적용한 Extension 예제이다. DateTime 예제를 실행하기 위해 intl 패키지를 먼저 설치해주어야 한다.
import 'package:intl/intl.dart';
extension DateTimeExtension on DateTime {
String get formattedDate => DateFormat('yyyy/MM/dd').format(this);
String get formattedDateTime => DateFormat('yyyy/MM/dd HH:mm:ss').format(this);
}
void main() {
DateTime currentTime = DateTime.now();
print(currentTime.formattedDate());
print(currentTime.formattedDateTime());
}
반응형