자니노트

Dart extension 설명 및 사용법 - 클래스에 새로운 기능을 추가 본문

모바일 개발/Dart&Flutter

Dart extension 설명 및 사용법 - 클래스에 새로운 기능을 추가

zaninote 2023. 8. 23. 21:48

"extension"은 Dart 2.7부터 도입된 기능으로, 기존 클래스에 새로운 기능을 추가할 수 있게 해줍니다. 

이는 기존 클래스를 확장하여 추가적인 메서드나 속성을 제공하고자 할 때 유용합니다. 

이러한 확장은 원본 클래스를 수정하지 않고도 그 위에 새로운 기능을 덧붙일 수 있게 해줍니다.

예를 들어, List 클래스에 printElements라는 새로운 메서드를 추가하려면 다음과 같이 할 수 있습니다:

extension PrintElements<T> on List<T> {
  void printElements() {
    for (var item in this) {
      print(item);
    }
  }
}

void main() {
  var list = [1, 2, 3, 4, 5];
  list.printElements();  // 1, 2, 3, 4, 5를 각각 출력합니다.
}

이 예제에서 PrintElements extension은 List 클래스에 적용되며, 그 결과로 List 객체는 printElements 메서드를 사용할 수 있게 됩니다.

Dart의 "extension" 기능은 기존 클래스를 변경하지 않고도 클래스에 추가적인 기능을 제공하고자 할 때 매우 유용합니다.

 

아래는 extension에 대한 몇 가지 주요 점입니다:

 

기존 클래스 수정 없이 기능 추가:
extension을 사용하면, 기존에 정의된 클래스나 라이브러리에 새로운 메서드나 속성을 추가할 수 있습니다.
이렇게 확장된 기능은 해당 클래스의 인스턴스에서 사용할 수 있습니다.

 

타입 매개변수 지원:
위의 예제에서 볼 수 있듯이, extension은 제네릭을 지원합니다. 이를 통해 다양한 타입에 대해 동일한 확장 기능을 제공할 수 있습니다.

 

명시적 이름:
extension에는 선택적으로 이름을 부여할 수 있습니다. 이 이름은 주로 코드 내에서 확장을 참조할 때 유용합니다.
그러나 대부분의 경우, 이름 없이 extension을 정의하고 사용할 수 있습니다.

 

제한된 확장:
extension은 특정 타입에만 적용됩니다. 예를 들어, List<int>에만 특정 확장 기능을 제공하려면 해당 타입에만 extension을 적용할 수 있습니다.

 

예제로 다시 한번 살펴보겠습니다:

extension IntParsing on String {
  int parseInt() {
    return int.parse(this);
  }
}

void main() {
  String numberString = "12345";
  int number = numberString.parseInt(); 
  print(number);  // 12345 출력
}

위의 예제에서는 String 클래스에 parseInt라는 새로운 메서드를 추가합니다. 이 메서드는 문자열을 정수로 변환합니다. extension을 사용하면 String 클래스를 직접 수정하지 않고도 이러한 추가 기능을 제공할 수 있습니다.

요약하면, Dart의 extension은 기존의 코드나 라이브러리를 수정하지 않고도 추가적인 기능을 제공할 수 있게 해주는 강력한 도구입니다.

Comments