Study/Dart,Flutter

19. [Dart, Flutter] extension에 대하여 [1부]

코딩 잘 할거얌:) 2024. 1. 8. 12:36
반응형

앞서 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