기억을 지배하는 기록

Dart 화살표 함수 본문

Flutter for Beginners

Dart 화살표 함수

Andrew's Akashic Records 2025. 2. 21. 16:01
728x90

Dart

Dart에서 화살표 함수 (=>) 사용하기

Dart의 화살표 함수(Arrow Function)단순한 함수 표현식을 간결하게 작성할 수 있도록 도와줍니다.
=> 기호를 사용하여 함수 본문을 한 줄로 줄일 수 있습니다.

1. 화살표 함수 기본 문법

1.1 기본 함수

일반적인 함수:

int add(int a, int b) {
  return a + b;
}

화살표 함수로 변환:

int add(int a, int b) => a + b;

차이점:

  • { return ... } 대신 =>를 사용하여 한 줄로 작성 가능
  • 세미콜론(;)을 함수 본문 끝에 추가해야 함

결과는 동일

void main() {
  print(add(3, 5)); // 8
}

2. 반환값이 없는 경우 (void)

화살표 함수는 void 함수에도 사용할 수 있습니다.

2.1 일반 함수

void sayHello() {
  print("Hello, Dart!");
}

화살표 함수 변환

void sayHello() => print("Hello, Dart!");

출력

void main() {
  sayHello(); // Hello, Dart!
}

3. 람다 함수(익명 함수)와 화살표 함수

익명 함수(람다 함수) 에도 화살표(=>)를 사용할 수 있습니다.

void main() {
  var multiply = (int a, int b) => a * b;
  
  print(multiply(4, 5)); // 20
}

- 익명 함수에서도 화살표 함수를 사용할 수 있음

4. 리스트와 함께 사용 (map, where, forEach)

화살표 함수는 리스트(List), 맵(Map)과 같은 컬렉션 메서드에서 자주 사용됩니다.

4.1 map() - 리스트 변환

void main() {
  List<int> numbers = [1, 2, 3, 4, 5];

  // 각 요소를 제곱한 리스트 반환
  var squaredNumbers = numbers.map((num) => num * num).toList();

  print(squaredNumbers); // [1, 4, 9, 16, 25]
}

- map()을 사용할 때 간결한 표현 가능

4.2 where() - 필터링

void main() {
  List<int> numbers = [10, 15, 20, 25, 30];

  // 짝수만 필터링
  var evenNumbers = numbers.where((num) => num % 2 == 0).toList();

  print(evenNumbers); // [10, 20, 30]
}

- where()을 사용하면 특정 조건을 만족하는 값만 추출 가능

4.3 forEach() - 리스트 반복

void main() {
  List<String> fruits = ["Apple", "Banana", "Cherry"];

  // 각 요소 출력
  fruits.forEach((fruit) => print(fruit));
}
Apple
Banana
Cherry

5. reduce()와 fold() 사용

화살표 함수는 reduce()와 fold() 같은 리스트 연산에서도 유용합니다.

5.1 reduce() - 리스트 값 누적

void main() {
  List<int> numbers = [1, 2, 3, 4, 5];

  int sum = numbers.reduce((a, b) => a + b);

  print(sum); // 15
}

- 리스트의 모든 요소를 더한 값을 반환

5.2 fold() - 초기값 포함 누적 연산

void main() {
  List<int> numbers = [1, 2, 3, 4, 5];

  int sumWithInitial = numbers.fold(10, (a, b) => a + b);

  print(sumWithInitial); // 25
}

- fold(초기값, 연산식)을 사용하면 초기값 포함 연산 가능

6. 클래스에서 화살표 함수 사용

6.1 클래스 내부에서 사용

class Rectangle {
  int width, height;

  Rectangle(this.width, this.height);

  // 화살표 함수로 면적 계산
  int get area => width * height;
}

void main() {
  Rectangle rect = Rectangle(10, 5);
  print(rect.area); // 50
}

- Getter를 화살표 함수로 간결하게 표현 가능

6.2 toString() 메서드 간결하게 작성

class Person {
  String name;
  int age;

  Person(this.name, this.age);

  @override
  String toString() => "이름: $name, 나이: $age";
}

void main() {
  Person p = Person("Alice", 30);
  print(p); // 이름: Alice, 나이: 30
}

- toString() 메서드를 간결하게 작성 가능

7. 조건문과 화살표 함수

화살표 함수에서도 삼항 연산자(? :)를 사용할 수 있습니다.

String checkEvenOrOdd(int number) => number % 2 == 0 ? "짝수" : "홀수";

void main() {
  print(checkEvenOrOdd(10)); // 짝수
  print(checkEvenOrOdd(7));  // 홀수
}

- 간단한 조건문을 포함하는 함수 작성 가능

8. 화살표 함수 사용 시 주의할 점

=>는 한 줄짜리 표현식에서만 사용 가능

int add(int a, int b) => a + b; // 가능

int subtract(int a, int b) {
  return a - b; // 가능 (일반 함수)
}

int multiply(int a, int b) => {  // 오류 발생
  return a * b;
};

- {} 블록이 필요한 경우 화살표 함수를 사용할 수 없음

 

여러 줄 코드가 필요한 경우 일반 함수 사용

void printNumbers(int max) {
  for (int i = 0; i < max; i++) {
    print(i);
  }
}

// void printNumbers(int max) => for (int i = 0; i < max; i++) print(i);  오류 발생

- 여러 줄이 필요한 경우 일반 {} 블록을 사용하는 것이 적절함

화살표 함수 정리

사용 사례 예제
기본 함수 변환 int add(int a, int b) => a + b;
void 함수 void sayHello() => print("Hello!");
리스트 변환 (map) numbers.map((num) => num * num).toList();
리스트 필터링 (where) numbers.where((num) => num % 2 == 0).toList();
리스트 반복 (forEach) fruits.forEach((fruit) => print(fruit));
누적 연산 (reduce, fold) numbers.reduce((a, b) => a + b);
클래스 메서드 String toString() => "이름: $name, 나이: $age";

 

728x90
Comments