티스토리 뷰

반응형

📌 Dart의 함수 (Function) 문법 완벽 정리 - 정의부터 반환값까지!

Dart에서 함수(Function)는 코드의 재사용성을 높이고, 가독성을 개선하는 중요한 요소입니다.
이번 글에서는 Dart의 함수 정의 방법, 매개변수 활용, 반환값 처리 및 다양한 함수 스타일을 자세히 다룹니다.


🔹 1. 함수 정의 및 기본 문법

Dart에서 함수를 정의하는 기본 문법은 다음과 같습니다.

1️⃣ 기본적인 함수 선언과 호출

void sayHello() {
  print("안녕하세요!");
}

void main() {
  sayHello(); // 함수 호출
}

출력:

안녕하세요!
  • void는 반환값이 없는 함수를 의미합니다.
  • 함수는 반드시 main()에서 호출해야 실행됩니다.

2️⃣ 반환값이 있는 함수 (return 사용)

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

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

출력:

8
  • return을 사용하여 값을 반환합니다.
  • 반환 타입(int, String 등)을 명시하는 것이 권장됩니다.

  • void는 반환값이 없을 때 사용합니다.
  • 함수의 반환 타입을 명확하게 지정하면 코드 안정성이 높아집니다.

🔹 2. 매개변수 (Parameters)

Dart에서는 다양한 방법으로 매개변수를 전달할 수 있습니다.


🔸 1. 기본 매개변수

void greet(String name) {
  print("안녕하세요, $name!");
}

void main() {
  greet("철수"); // 안녕하세요, 철수!
}
  • 함수의 매개변수를 지정하고, 값을 전달할 수 있습니다.

🔸 2. 선택적 매개변수 ([] 사용)

선택적 매개변수는 제공하지 않아도 되는 값입니다.

void greet(String name, [String? message]) {
  if (message != null) {
    print("$name: $message");
  } else {
    print("안녕하세요, $name!");
  }
}

void main() {
  greet("영희"); // 안녕하세요, 영희!
  greet("철수", "반가워요!"); // 철수: 반가워요!
}
  • [] 내부의 매개변수는 선택 사항입니다.
  • null 가능성이 있으므로 String?을 사용해야 합니다.

🔸 3. 기본값을 가지는 매개변수 ({} + = 사용)

기본값을 설정하면 매개변수를 생략해도 됩니다.

void introduce(String name, {String role = "손님"}) {
  print("이름: $name, 역할: $role");
}

void main() {
  introduce("민수"); // 이름: 민수, 역할: 손님
  introduce("지수", role: "개발자"); // 이름: 지수, 역할: 개발자
}
  • {}를 사용하면 **이름 있는 매개변수(named parameter)**를 만들 수 있습니다.
  • role = "손님"처럼 기본값을 설정할 수 있습니다.

  • 필수적인 매개변수는 일반 매개변수 (name) 사용
  • 옵션이면 [] (선택적) 또는 {} (이름 있는 매개변수) 사용
  • 기본값이 필요하면 {param = value} 형태로 설정

🔹 3. 화살표 함수 (=> 사용)

Dart에서는 짧은 함수 정의를 위해 **화살표 함수 (Arrow Function)**를 사용할 수 있습니다.

1️⃣ 기본 화살표 함수 (=> 사용)

int square(int x) => x * x;

void main() {
  print(square(4)); // 16
}

출력:

16
  • => (화살표) 오른쪽에 표현식을 사용하여 간결하게 정의할 수 있습니다.

2️⃣ return이 있는 경우도 가능

String greet(String name) => "안녕하세요, $name!";

void main() {
  print(greet("하나")); // 안녕하세요, 하나!
}
  • return이 필요한 경우에도 =>를 사용할 수 있습니다.

  • 간단한 함수는 =>를 사용하면 코드가 짧고 가독성이 좋아집니다.
  • 로직이 복잡한 함수는 {}를 사용하여 명확하게 작성하는 것이 좋습니다.

🔹 4. 익명 함수 (Lambda)

익명 함수는 이름이 없는 함수로, 주로 List의 forEach() 같은 곳에서 사용됩니다.

void main() {
  var numbers = [1, 2, 3];

  numbers.forEach((num) {
    print(num * 2);
  });
}

출력:

2
4
6
  • forEach()의 매개변수로 익명 함수를 전달하여 리스트의 요소를 변환할 수 있습니다.

🔹 5. 고차 함수 (Higher-Order Function)

Dart에서는 함수를 매개변수로 전달하거나 반환할 수 있습니다.

1️⃣ 함수를 매개변수로 전달

void performOperation(int a, int b, int Function(int, int) operation) {
  print(operation(a, b));
}

void main() {
  performOperation(5, 3, (x, y) => x + y); // 8
  performOperation(5, 3, (x, y) => x * y); // 15
}
  • 함수 operation을 매개변수로 받아 동적으로 계산할 수 있습니다.

2️⃣ 함수를 반환하는 함수

Function multiplyBy(int factor) {
  return (int number) => number * factor;
}

void main() {
  var triple = multiplyBy(3);
  print(triple(4)); // 12
}
  • multiplyBy(3)가 triple을 생성하고, triple(4)가 3 * 4 = 12를 계산합니다.

🛠 정리

개념 설명

기본 함수 void functionName() {}
반환값 있는 함수 int add(int a, int b) { return a + b; }
선택적 매개변수 void greet(String name, [String? message])
이름 있는 매개변수 void introduce(String name, {String role = "손님"})
화살표 함수 int square(int x) => x * x;
익명 함수 numbers.forEach((num) { print(num * 2); });
고차 함수 Function multiplyBy(int factor) { return (int number) => number * factor; }

🔥 Dart 함수 활용 꿀팁

  1. 반환 타입을 명확히 지정하면 실수 방지 가능.
  2. 이름 있는 매개변수를 사용하면 가독성이 좋아짐.
  3. **화살표 함수 (=>)**를 사용하면 간단한 코드 작성 가능.
  4. 익명 함수를 활용하여 리스트 변환과 같은 기능을 간결하게 구현.

 

반응형