본문 바로가기

Language Syntax/Dart

[Dart] 익스텐션 (Extension)

728x90

1. 개요

Dart 에는 Extension 문법이 존재한다.

어떠한 수정 불가능한 클래스에 대하여 메소드를 추가/수정 하고 싶을 경우 Extension 을 사용할 수 있다.

2. 사용

extension [extension 이름] on [타입] {} 와 같이 사용된다.

class A { void methodA() {} }

위 예시와 같이 클래스 AmethodA() 를 가지고 있다. 이때, methodB() 도 추가하고 싶지만, 클래스 A 를 수정할 수 없다면 Extension 을 사용 가능하다.

extension AExtension on A { void methodB() {} }

위와 같이 나타내면 다음과 같은 사용이 가능해진다.

A().methodB();

예시를 살펴보자.

3. 예시

Dart 에서는 기본적으로 숫자형 리스트 (Iterable<num>)의 평균을 구해주는 메소드가 존재하지 않는다. 리스트의 합을 구하고 싶을 때, 다음과 같이 구현한다.

num sum = list.reduce((a, b) => a + b);

하지만, 이것은 직관적이지 못하다. 평균을 구할 경우에는 더욱 복잡해진다.

num avg = list.reduce((a, b) => a + b) / list.length;

이제 숫자형 리스트를 Extension 하여 직관적인 메소드를 추가해보자.

extension NumIterableExtension on Iterable<num> {
  num get sum => reduce((a, b) => a + b);
  num get average => sum / length;
}

이제 다음과 같은 사용이 가능하다.

void main() {
  List<num> list = [1, 3, 5, 8, 9];
  print(list.sum);
  print(list.average);
}

출력결과

26
5.2
728x90

'Language Syntax > Dart' 카테고리의 다른 글

[Dart] factory 예약어에 대한 고찰  (0) 2024.01.09
[Dart] 널 세이프티 (Null Safety)  (0) 2023.11.07
[Dart] get / set  (0) 2023.10.31