일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 신재생에너지 발전설비 기사
- spring integration
- 고전역학
- 코틀린
- write by GPT-4
- oracle
- 자바네트워크
- Java
- GPT-4's answer
- 소프트웨어공학
- 자바
- mobile programming
- NIO
- flet
- 역학
- 데이터베이스
- flutter
- 유닉스
- kotlin
- DART
- 파이썬
- jpa
- python
- 시스템
- spring data jpa
- 리눅스
- Database
- write by chatGPT
- chatGPT's answer
- 인프라
- Today
- Total
기억을 지배하는 기록
Dart의 함수(Function)와 람다(Lambda) 본문
Dart의 함수(Function)와 람다(Lambda)
Dart에서 함수는 코드의 재사용성을 높이고, 모듈화하여 유지보수를 쉽게 만드는 중요한 요소입니다.
또한 Dart는 람다(Lambda) 함수(= 화살표 함수) 를 지원하여 간결한 코드 작성을 도와줍니다.
1. 함수(Function) 기본 문법
1.1 함수 선언 및 호출
void sayHello() {
print("Hello, Dart!");
}
void main() {
sayHello(); // 함수 호출
}
- void는 반환값이 없을 때 사용됩니다.
1.2 매개변수가 있는 함수
void greet(String name) {
print("Hello, $name!");
}
void main() {
greet("Alice"); // Hello, Alice!
}
- 함수의 매개변수(parameter)를 통해 값을 전달할 수 있습니다.
1.3 반환값이 있는 함수
int add(int a, int b) {
return a + b;
}
void main() {
int result = add(3, 5);
print(result); // 8
}
- return 키워드를 사용하여 값을 반환할 수 있습니다.
1.4 선택적 매개변수 (Optional Parameters)
Dart에서는 선택적 매개변수를 지원합니다.
1.4.1 대괄호 [ ] 사용 (선택적 매개변수)
void introduce(String name, [int? age]) {
print("Name: $name");
if (age != null) {
print("Age: $age");
}
}
void main() {
introduce("Alice"); // Name: Alice
introduce("Bob", 25); // Name: Bob, Age: 25
}
- 선택적 매개변수는 null을 허용하므로 int?로 선언해야 합니다.
1.4.2 중괄호 { } 사용 (명명된 매개변수)
void describe({String name = "Unknown", int age = 0}) {
print("Name: $name, Age: $age");
}
void main() {
describe(name: "Charlie", age: 30); // Name: Charlie, Age: 30
describe(); // Name: Unknown, Age: 0
}
- {} 사용 시 매개변수를 명시적으로 전달해야 하며, 기본값을 설정할 수 있습니다.
1.4.3 required 키워드 사용 (필수 명명 매개변수)
void registerUser({required String username, required String email}) {
print("Username: $username, Email: $email");
}
void main() {
registerUser(username: "Alice", email: "alice@example.com");
// registerUser(username: "Bob"); // 오류 (email이 필요함)
}
- required 키워드를 사용하면 반드시 값을 전달해야 합니다.
2. 익명 함수 (Anonymous Function)
익명 함수는 이름 없이 변수에 할당하여 사용할 수 있는 함수입니다.
void main() {
var multiply = (int a, int b) {
return a * b;
};
print(multiply(3, 4)); // 12
}
- 익명 함수는 var 변수에 할당하여 사용할 수 있습니다.
3. 람다(Lambda) 함수 (화살표 함수)
람다 함수는 간단한 함수 표현식을 한 줄로 작성할 때 유용합니다. 화살표(=>)를 사용하여 선언합니다.
3.1 기본 화살표 함수
int add(int a, int b) => a + b;
void main() {
print(add(5, 3)); // 8
}
- { return ... } 대신 =>를 사용하여 간결하게 작성할 수 있습니다.
3.2 반환값이 없는 화살표 함수
void sayHi() => print("Hi, Dart!");
void main() {
sayHi(); // Hi, Dart!
}
- void 함수에서도 화살표(=>)를 사용할 수 있습니다.
3.3 람다 함수를 매개변수로 전달
람다 함수를 다른 함수의 매개변수로 전달할 수 있습니다.
void executeFunction(Function fn) {
fn();
}
void main() {
executeFunction(() => print("Lambda 실행!"));
}
- 람다 함수는 콜백 함수로도 활용 가능합니다.
4. 고차 함수 (Higher-Order Function)
고차 함수는 다른 함수를 매개변수로 받거나 반환하는 함수를 의미합니다.
4.1 함수를 매개변수로 받기
void calculate(int a, int b, int Function(int, int) operation) {
print(operation(a, b));
}
void main() {
calculate(10, 5, (x, y) => x + y); // 15
calculate(10, 5, (x, y) => x * y); // 50
}
- 매개변수로 전달된 함수를 실행하여 결과를 출력합니다.
4.2 함수를 반환하는 함수
Function getMultiplier(int factor) {
return (int x) => x * factor;
}
void main() {
var triple = getMultiplier(3);
print(triple(10)); // 30
}
- getMultiplier(3)는 x * 3을 수행하는 함수를 반환합니다.
5. 재귀 함수 (Recursive Function)
재귀 함수는 자기 자신을 호출하는 함수입니다.
예제: 팩토리얼 계산
int factorial(int n) {
if (n == 0) return 1;
return n * factorial(n - 1);
}
void main() {
print(factorial(5)); // 120
}
- factorial(5) → 5 * factorial(4) → 5 * 4 * factorial(3) …
- 재귀 호출이 너무 깊어지면 스택 오버플로우(Stack Overflow) 발생 가능
6. 클로저(Closure)
클로저는 함수가 외부 변수에 접근하고 유지할 수 있는 함수입니다.
Function makeCounter() {
int count = 0;
return () {
count++;
print(count);
};
}
void main() {
var counter = makeCounter();
counter(); // 1
counter(); // 2
counter(); // 3
}
- count 변수는 makeCounter()가 실행된 후에도 유지됩니다.
7. 함수의 다양한 활용
7.1 리스트 map()과 where() 활용
void main() {
List<int> numbers = [1, 2, 3, 4, 5];
var squared = numbers.map((num) => num * num).toList();
print(squared); // [1, 4, 9, 16, 25]
var evenNumbers = numbers.where((num) => num % 2 == 0).toList();
print(evenNumbers); // [2, 4]
}
- map(): 리스트의 각 요소를 변환
- where(): 특정 조건을 만족하는 요소만 필터링
개념 | 설명 |
함수 선언 | void sayHello() { print("Hello"); } |
익명 함수 | var add = (int a, int b) { return a + b; }; |
람다 함수 | int add(int a, int b) => a + b; |
선택적 매개변수 | [ ] 또는 { } 사용 |
고차 함수 | 함수가 매개변수 또는 반환값이 될 수 있음 |
재귀 함수 | 자기 자신을 호출하는 함수 |
클로저 | 함수가 외부 변수를 기억하는 기능 |
'Flutter for Beginners' 카테고리의 다른 글
Dart 화살표 함수 (0) | 2025.02.21 |
---|---|
Dart의 예외 처리 (0) | 2025.02.21 |
Dart의 제어문 (0) | 2025.02.20 |
Dart의 연산자 (0) | 2025.02.20 |
Dart의 enum (0) | 2025.02.19 |