Dart Extension에 관하여

Ximyaa·2022년 6월 12일
1

Flutter, '아' 다르고 '어' 다른 Extension 키워트 활용 포맷팅 로직
새롭게 작성한 포스팅에서 구체적인 설명과 실제 적용 사례를 확인하실 수 있습니다😀

Dart Extension

  • 일반 메서드와 함께 확장 메서드를 제안하는 키워드.
  • 보통 Extention이 없더라도 기능 명세 구현 가능
    • 다만 효율적인 구조를 위해 Extension 을 활용
  • 코드의 가독성 및 구독성에 도움을 줌.

1. Dart Extension (Basic Usecase)

유저의 아이디의 최소 글자 수(최소 7자 이상)를 제한하는 클래스를 구현한다고 가정해 보자. String

Extension 사용 여부에 따라 아래와 같이 구분할 수 있다.

Not Using Extension

class UserIdValidation {
  static bool isValidLenght(String str) {
    return str.length >= 7 ? true : false;
  }
}

class UserIdValidation {
  static bool isValidLenght(String str) {
    return str.length >= 7 ? true : false;
  }
}

void main() {
  UserIdValidation.isValidLenght("vkdl370528") // true
	UserIdValidation.isValidLenght("Ximya") // false
}
  • String을 인자로 받아 boolean 값을 리턴하는 클래스 메소드.
  • 메소드가 static으로 선언되었기 때문에 별도의 인스턴스를 생성하지 않음.

Using Extension

extension UserIdValidation on String {
  bool get isIdValidLength {
    return this.length >= 7 ? true : false;
  }
}

void main() {
  "vkdl370528".isValidLenght // true
	"Ximya".isValidLength // false
}
  • Extension의 on 키워드를 통해 Extend 할 타입을 설정
  • Get 접근자를 통해 Extension 메소드에 접근할 수 있음.
  • 좀 더 직관적으로 Extension 메소드를 사용할 수 있음.

2. Dart Extension With Operater

이번에는 두 개의 단어를 더하는 기능을 제공하는 Extension을 만들어보자.

Without Using Operator

 extension StringExtension on String {
  String concatWithSpace(String other) {
    return '$this $other';
  }
}

void main () {
	"XimYa".concatWithSpace("Kim") // Ximya Kim
}
  • String을 인자로 받아서 String Join이 가능
  • 인자로 받는 String과 extend 하는 String은 $ (dollarSign) 의 키워드로 참조하여 구분함.

Using Operator Syntax

extension StringExtension on String {
  String operator &(String other) => '$this $other';
}

void main() {
	"Ximya" & "Kim" // Ximya Kim
}
  • 위에 코드도 기능적으로 이상이 없지만 extension 메소드 내에 operator 를 이용하여 좀 더 직관적으로 표현이 가능함.
profile
개발자 지망생

0개의 댓글