[Flutter] 03. Dart 함수 - 선언, 매개변수, 람다
Dart의 함수 선언 방법과 다양한 매개변수 활용법을 배웁니다.
함수 기본
함수 선언
// 기본 형태
반환타입 함수명(매개변수) {
// 본문
return 값;
}
// 예시
int add(int a, int b) {
return a + b;
}
void sayHello(String name) {
print('안녕하세요, $name님!');
}
void main() {
int result = add(3, 5);
print(result); // 8
sayHello('홍길동'); // 안녕하세요, 홍길동님!
}
화살표 함수 (Arrow Function)
한 줄로 표현 가능한 함수는 => 사용:
int add(int a, int b) => a + b;
void greet(String name) => print('Hello, $name!');
bool isEven(int n) => n % 2 == 0;
void main() {
print(add(10, 20)); // 30
print(isEven(4)); // true
}
매개변수 종류
위치 매개변수 (Positional)
// 필수 위치 매개변수
String introduce(String name, int age) {
return '$name, $age세';
}
void main() {
print(introduce('홍길동', 25)); // 홍길동, 25세
}
선택적 위치 매개변수 (Optional Positional)
[]로 감싸면 선택적:
String greet(String name, [String? title, String suffix = '님']) {
if (title != null) {
return '$title $name$suffix';
}
return '$name$suffix';
}
void main() {
print(greet('홍길동')); // 홍길동님
print(greet('홍길동', '교수')); // 교수 홍길동님
}
이름 있는 매개변수 (Named Parameters)
{}로 감싸면 이름으로 전달. Flutter에서 가장 많이 사용됩니다.
// required: 필수, 기본값 없으면 반드시 전달
void createUser({
required String name,
required int age,
String role = '일반', // 기본값
String? email, // 선택적
}) {
print('이름: $name, 나이: $age, 역할: $role');
if (email != null) print('이메일: $email');
}
void main() {
createUser(name: '홍길동', age: 25);
createUser(
name: '김철수',
age: 30,
role: '관리자',
email: 'kim@test.com',
);
}
Flutter 위젯에서 Named Parameters를 매우 많이 사용합니다.
Text('Hello', style: TextStyle(fontSize: 20))같은 형태입니다.
고급 함수 활용
일급 객체 (First-class Function)
함수를 변수에 저장하거나 매개변수로 전달할 수 있습니다.
void main() {
// 함수를 변수에 저장
var multiply = (int a, int b) => a * b;
print(multiply(3, 4)); // 12
// 함수를 매개변수로 전달
List<int> numbers = [1, 2, 3, 4, 5];
var result = numbers.map((n) => n * 10).toList();
print(result); // [10, 20, 30, 40, 50]
}
typedef (함수 타입 정의)
typedef MathOperation = int Function(int, int);
int add(int a, int b) => a + b;
int subtract(int a, int b) => a - b;
int calculate(int a, int b, MathOperation operation) {
return operation(a, b);
}
void main() {
print(calculate(10, 3, add)); // 13
print(calculate(10, 3, subtract)); // 7
}
클로저 (Closure)
Function makeCounter() {
int count = 0;
return () {
count++;
return count;
};
}
void main() {
var counter = makeCounter();
print(counter()); // 1
print(counter()); // 2
print(counter()); // 3
}
실습 예제
계산기 함수
double calculate(double a, double b, String operator) {
return switch (operator) {
'+' => a + b,
'-' => a - b,
'*' => a * b,
'/' => b != 0 ? a / b : 0,
_ => throw ArgumentError('잘못된 연산자: $operator'),
};
}
void main() {
print(calculate(10, 3, '+')); // 13.0
print(calculate(10, 3, '-')); // 7.0
print(calculate(10, 3, '*')); // 30.0
print(calculate(10, 3, '/')); // 3.333...
}
리스트 필터 함수
List<T> filterList<T>(List<T> items, bool Function(T) test) {
List<T> result = [];
for (var item in items) {
if (test(item)) result.add(item);
}
return result;
}
void main() {
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var evens = filterList(numbers, (n) => n % 2 == 0);
print(evens); // [2, 4, 6, 8, 10]
var names = ['홍길동', '김', '이순신', '박'];
var longNames = filterList(names, (n) => n.length >= 3);
print(longNames); // [홍길동, 이순신]
}
- [Flutter] 18. 빌드와 배포 - APK, App Store
- [Flutter] 17. 실전 프로젝트 - Todo 앱 만들기
- [Flutter] 16. 패키지 활용 - 유용한 패키지 소개
- [Flutter] 15. 디자인 - 테마, 스타일, 반응형
- [Flutter] 14. 로컬 저장소 - SharedPreferences, SQLite
- [Flutter] 13. HTTP 통신 - REST API 연동
- [Flutter] 12. 상태관리 - setState, Provider
- [Flutter] 11. 사용자 입력 - Form, TextField, 버튼
- [Flutter] 10. 화면 이동 - Navigation, Route
- [Flutter] 09. 리스트와 스크롤 - ListView, GridView
- [Flutter] 08. 레이아웃 - Row, Column, Stack
- [Flutter] 07. 위젯 기초 - StatelessWidget, StatefulWidget
- [Flutter] 06. Flutter 소개 및 개발환경 설치
- [Flutter] 05. Dart 비동기 - Future, async/await, Stream
- [Flutter] 04. Dart 클래스 - OOP 기초
- [Flutter] 03. Dart 함수 - 선언, 매개변수, 람다
- [Flutter] 02. Dart 제어문 - 조건문, 반복문
- [Flutter] 01. Dart 언어 기초 - 변수, 타입, 연산자