반응형
앞서 enum에 이어 드디어 extension에 대해 알아보도록 하자.
왜 extension을 설명하려고 하냐면,
가독성에 있어서 이점이 너무나도 많다. 다만 바로 들어가면 어려우니 기본적인 내용 1부, 활용하는 부분 2부 로 나누어서 작성하도록 하겠다.
Extension 이란 무엇인가
extension 이란 직역하면, 확장이란 뜻이다.
말 그대로 확장한다는 뜻인데 어떤것을 확장하는지 코드를 보고 확인하자.
enum SexType {
man(toKorean: "남성"),
woman(toKorean: "여성"),
none(toKorean: "선택안함");
final String toKorean;
const SexType({required this.toKorean});
}
extension SexTypeExtension on SexType {
/// index넘버를 가져오는 메소드
toInt() => index;
/// 선택된지 안 된지 확인하는 메소드
bool isNone() {
if (this == SexType.none) return true;
return false;
}
}
bool isContainUserSexType = SexType.man.isNone(); // false
코드를 보면 분명 enum SexType에는 없는 isNone이 추가되어서 사용할 수 있게 되었다.
이 코드는 dart 2.17 이전 버전에서는 이렇게 enum에다가 함수를 넣을 수 없어서 이렇게 사용하였다. 지금은 enum안에다가 자체적으로 추가를 하면 되지만.
어쨌거나 이렇게 추가적인 기능을 넣어서 사용할 수 있도록 하는것이 extension의 목적이다. 이렇게만 쓸 수 있을까?? 아니다!
extension 활용하기
어떻게 더 활용하면 좋을까?
DateTime을 변경해보자.
extension CustomDateTime on DateTime {
String toKorean() {
return "$year일 $month월 $day일 $hour시 $minute분";
}
}
String currentDate = DateTime.now().toKorean(); //2024일 1월 8일 12시 30분
이렇게도 활용할 수 있다.
getter를 이용하여 조금 더 깔끔하게 표현해보자.
extension CustomInteger on int {
Duration get toMiliSecond => Duration(milliseconds: this);
}
Duration animatedDuration = 500.toMiliSecond;
print("Current Duration : $animatedDuration"); //Current Duration : 0:00:00.500000
이렇게하면 getter를 이용해서 괄호없이 조금 더 깔끔하게 적용할 수 있다.
dart에서는 이렇게 무궁무진하게 적용할 수 있고 다음 2부에서는 Flutter에다가 본격적으로 활용해보도록 하자.
728x90
'Study > Dart,Flutter' 카테고리의 다른 글
21. [Dart] dart의 factory그리고 singleton에 대하여 (2) | 2024.01.13 |
---|---|
20. [Dart, Flutter] extension활용하여 가독성 높이는 코드작성하기 [2부] (0) | 2024.01.08 |
18. [Dart, Flutter] dart enum에 대하여 (0) | 2024.01.08 |
[Flutter] Android13 권한 READ_EXTERNAL_STORAGE 와Permission_handler (0) | 2023.08.28 |
[Flutter] 디자인패턴 MVVM과 riverpod (1부 MVVM) (1) | 2023.03.18 |