ํจ์
์
๋ ฅ, ์ฐ์ฐ, ๋ฐํ ๊ตฌ์กฐ๋ก ํน์ ์์
์ ์ํํ๋ ์ฝ๋์ ๋ชจ์
ํน์ง
โข
์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ ํฅ์
โข
ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐํ ๋ฐ ๋ชจ๋ํ
โข
์ ์ง๋ณด์์ ์ฉ์ด์ฑ
โข
์ฝ๋์ ๊ฐ๋
์ฑ ํฅ์
ํจ์
โข
ํจ์ ์ ์
โฆ
ํจ์ ํธ์ถ
โฆ
๋งค๊ฐ๋ณ์
โช
์์น ๋งค๊ฐ๋ณ์
โช
์ด๋ฆ ๋งค๊ฐ๋ณ์
โช
ํ์ ๋งค๊ฐ๋ณ์ vs ์ ํ ๋งค๊ฐ๋ณ์
โข
์ต๋ช
ํจ์
โข
๋๋ค ํจ์
โข
์ฌ๊ท ํจ์
ํจ์ ์ ์
Dart ์์ ํจ์๋ฅผ ์ ์ํ ๋๋ ๋ฐํํ์
ํจ์๋ช
( ๋งค๊ฐ๋ณ์ ) { } ๊ตฌ์กฐ๋ก ์ ์ํฉ๋๋ค.
ํ์
ํจ์๋ช
( ๋งค๊ฐ๋ณ์1, ๋งค๊ฐ๋ณ์2 ) {
}
Dart
๋ณต์ฌ
์์ ์ฝ๋
int add(int a, int b) {
return a + b;
}
void main() {
print(add(3, 5)); // ์ถ๋ ฅ: 8
}
Dart
๋ณต์ฌ
ํจ์์ ๋ฐํ ํ์
์ด ์์ ๋๋ void ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
void printMessage() {
print('Hello World!');
}
void main() {
printMessage(); // ์ถ๋ ฅ: Hello World!
}
Dart
๋ณต์ฌ
ํจ์ ํธ์ถ
์ ์๋ ํจ์๋ฅผ ์คํํ๊ธฐ ์ํด ํจ์๋ช
๊ณผ ํ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ํจ์๋ฅผ ํธ์ถํ๋ฉด ํจ์ ๋ด๋ถ์ ์ฝ๋๊ฐ ์คํ๋๊ณ , ๋ฐํ๊ฐ์ด ์๋ค๋ฉด ๊ทธ ๊ฐ์ ๋ฐ์ ์ ์์ต๋๋ค.
ํจ์๋ช
( ์ธ์1, ์ธ์2 );
Dart
๋ณต์ฌ
๋งค๊ฐ๋ณ์
โข
์์น ๋งค๊ฐ๋ณ์
โข
์ด๋ฆ ๋งค๊ฐ๋ณ์
โข
ํ์ ๋งค๊ฐ๋ณ์ vs ์ ํ ๋งค๊ฐ๋ณ์
์์น ๋งค๊ฐ๋ณ์ (Positional Parameters)
์ ํ | ๋ฌธ๋ฒ | ํธ์ถ ๋ฐฉ์ | ํน์ง |
์์น ํ์ ๋งค๊ฐ๋ณ์ | ํ์
๋ณ์๋ช
| ํจ์(๊ฐ) | ๋ฐ๋์ ์์๋๋ก ๊ฐ์ ์ ๋ฌํด์ผ ํจ |
์์น ์ ํ ๋งค๊ฐ๋ณ์ | [ํ์
๋ณ์๋ช
= ๊ธฐ๋ณธ๊ฐ] | ํจ์() ๋๋ ํจ์(๊ฐ) | ์ ๋ฌํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ |
์ด๋ฆ ๋งค๊ฐ๋ณ์ (Named Parameters)
์ ํ | ๋ฌธ๋ฒ | ํธ์ถ ๋ฐฉ์ | ํน์ง |
์ด๋ฆ ํ์ ๋งค๊ฐ๋ณ์ | {required ํ์
๋ณ์๋ช
} | ํจ์(๋ณ์๋ช
: ๊ฐ) | ๋ฐ๋์ ๊ฐ์ ์ ๋ฌํด์ผ ํจ |
์ด๋ฆ ์ ํ ๋งค๊ฐ๋ณ์ | {ํ์
๋ณ์๋ช
= ๊ธฐ๋ณธ๊ฐ} | ํจ์(๋ณ์๋ช
: ๊ฐ) | ์ ๋ฌํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ |
ํ์ ๋งค๊ฐ๋ณ์ vs ์ ํ ๋งค๊ฐ๋ณ์
๊ตฌ๋ถ | ํ์ ๋งค๊ฐ๋ณ์ | ์ ํ ๋งค๊ฐ๋ณ์ |
๊ฐ ์ ๋ฌ ์ฌ๋ถ | ๋ฐ๋์ ์ ๋ฌํด์ผ ํจ | ์ ๋ฌํ์ง ์์๋ ๋จ |
๊ธฐ๋ณธ๊ฐ ์ค์ | ||
ํธ์ถ ๋ฐฉ์ | ์์น: ํจ์(๊ฐ)
์ด๋ฆ: ํจ์(๋ณ์๋ช
: ๊ฐ) | ์์น: ํจ์() ๋๋ ํจ์(๊ฐ)
์ด๋ฆ: ํจ์() ๋๋ ํจ์(๋ณ์๋ช
: ๊ฐ) |
๋ฌธ๋ฒ | ์์น: ํ์
๋ณ์๋ช
์ด๋ฆ: {required ํ์
๋ณ์๋ช
} | ์์น: [ํ์
๋ณ์๋ช
= ๊ธฐ๋ณธ๊ฐ]
์ด๋ฆ: {ํ์
๋ณ์๋ช
= ๊ธฐ๋ณธ๊ฐ} |
์ค๋ฅ ๋ฐ์ ์ฌ๋ถ | ๊ฐ์ ์ ๋ฌํ์ง ์์ผ๋ฉด ์ปดํ์ผ ์ค๋ฅ ๋ฐ์ | ๊ฐ์ ์ ๋ฌํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ
(๊ธฐ๋ณธ๊ฐ์ด ์์ผ๋ฉด null) |
์์ ์ฝ๋ 1 - ์์น ๋งค๊ฐ๋ณ์, ์ด๋ฆ ๋งค๊ฐ๋ณ์
// 1. ์์น ํ์ ๋งค๊ฐ๋ณ์
void greet(String name) {
print("Hello, $name!");
}
greet("Alice"); // โ
Hello, Alice!
// greet(); // โ ์ค๋ฅ ๋ฐ์ (name ๊ฐ ํ์)
// 2. ์์น ์ ํ ๋งค๊ฐ๋ณ์
void greetOptional([String name = "Guest"]) {
print("Hello, $name!");
}
greetOptional(); // โ
Hello, Guest!
greetOptional("Bob"); // โ
Hello, Bob!
// 3. ์ด๋ฆ ํ์ ๋งค๊ฐ๋ณ์
void greetRequired({required String name}) {
print("Hello, $name!");
}
// greetRequired(); // โ ์ค๋ฅ ๋ฐ์ (name ๊ฐ ํ์)
greetRequired(name: "Charlie"); // โ
Hello, Charlie!
// 4. ์ด๋ฆ ์ ํ ๋งค๊ฐ๋ณ์
void greetNamed({String name = "Guest"}) {
print("Hello, $name!");
}
greetNamed(); // โ
Hello, Guest!
greetNamed(name: "David"); // โ
Hello, David!
Dart
๋ณต์ฌ
์์ ์ฝ๋ 2 - ํ์ ๋งค๊ฐ๋ณ์
// ์์น ํ์ ๋งค๊ฐ๋ณ์
void greet(String name) {
print("Hello, $name!");
}
greet("Alice"); // โ
Hello, Alice!
// greet(); // โ ์ค๋ฅ ๋ฐ์ (name ๊ฐ ํ์)
// ์ด๋ฆ ํ์ ๋งค๊ฐ๋ณ์
void greetRequired({required String name}) {
print("Hello, $name!");
}
// greetRequired(); // โ ์ค๋ฅ ๋ฐ์ (name ๊ฐ ํ์)
greetRequired(name: "Bob"); // โ
Hello, Bob!
Dart
๋ณต์ฌ
์์ ์ฝ๋ 2 - ์ ํ ๋งค๊ฐ๋ณ์
// ์์น ์ ํ ๋งค๊ฐ๋ณ์
void greetOptional([String name = "Guest"]) {
print("Hello, $name!");
}
greetOptional(); // โ
Hello, Guest!
greetOptional("Charlie"); // โ
Hello, Charlie!
// ์ด๋ฆ ์ ํ ๋งค๊ฐ๋ณ์
void greetNamed({String name = "Guest"}) {
print("Hello, $name!");
}
greetNamed(); // โ
Hello, Guest!
greetNamed(name: "David"); // โ
Hello, David!
Dart
๋ณต์ฌ
๋งค๊ฐ๋ณ์ ์ ๋ฆฌ
์ต๋ช ํจ์
์ด๋ฆ์ด ์๋ ํจ์
์ฝ๋ฐฑ ํจ์ (callback function)
๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋์ด ํน์ ์ด๋ฒคํธ๋ ์กฐ๊ฑด์ด ๋ฐ์ํ์ ๋ ํธ์ถ๋๋ ํจ์์
๋๋ค.
์ฃผ๋ก ๋น๋๊ธฐ ์์
์ด๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ต๋ช ํจ์
( ํ์
๋งค๊ฐ๋ณ์1, ํ์
๋งค๊ฐ๋ณ์2 ) { }
Dart
๋ณต์ฌ
๋ณ์์ ํ ๋น ๋ ์ต๋ช
ํจ์
var multiply = (int a, int b) {
return a * b;
};
void main() {
print(multiply(3, 5)); // ์ถ๋ ฅ: 15
}
Dart
๋ณต์ฌ
์ฝ๋ฐฑ ํจ์๋ก์จ์ ์ต๋ช
ํจ์
void processNumbers(List<int> numbers, Function callback) {
for (var number in numbers) {
callback(number);
}
}
void main() {
var numbers = [1, 2, 3, 4, 5];
// ์ต๋ช
ํจ์๋ฅผ ์ฝ๋ฐฑ์ผ๋ก ์ ๋ฌ
processNumbers(numbers, (number) {
print('์ฒ๋ฆฌ๋ ์ซ์: $number');
});
}
Dart
๋ณต์ฌ
๋๋ค ํจ์
๋จ์ผ ํํ์์ผ๋ก ์์ฑ๋๋ ๊ฐ๋จํ ํจ์์
๋๋ค.
ํ์ดํ(=>) ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์์ต๋๋ค.
๋๋ค ํจ์ ์ ์
(ํ์
๋งค๊ฐ๋ณ์1, ํ์
๋งค๊ฐ๋ณ์2) => ๋ฐํ๊ฐ;
Dart
๋ณต์ฌ
(ํ์
๋งค๊ฐ๋ณ์1, ํ์
๋งค๊ฐ๋ณ์2) => { ์คํ๋ฌธ }
Dart
๋ณต์ฌ
(ํ์
๋งค๊ฐ๋ณ์1, ํ์
๋งค๊ฐ๋ณ์2) => { return ๋ฐํ๊ฐ; }
Dart
๋ณต์ฌ
์์ ์ฝ๋
var multiply = (int a, int b) => a * b;
void main() {
print(multiply(3, 5)); // ์ถ๋ ฅ: 15
}
Dart
๋ณต์ฌ
์ฌ๊ท ํจ์
ํจ์ ์๊ธฐ ์์ ์ ํธ์ถํ๋ ํจ์
์ฌ๊ท ํจ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๊ธฐ ์์ ์ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์
๋๋ค.
โข
๋ณต์กํ ๋ฌธ์ ๋ฅผ ๋ ์์ ๋์ผํ ํํ์ ๋ฌธ์ ๋ก ๋๋์ด ํด๊ฒฐํ ์ ์์ต๋๋ค.
โข
์ฃผ๋ก ์ํ์ ๊ณ์ฐ(ํฉํ ๋ฆฌ์ผ, ํผ๋ณด๋์น ์์ด ๋ฑ)์ด๋ ํธ๋ฆฌ/๊ทธ๋ํ ์ํ์ ์ฌ์ฉ๋ฉ๋๋ค.
โข
์ข
๋ฃ ์กฐ๊ฑด(base case)์ด ๋ฐ๋์ ํ์ํ๋ฉฐ, ์ด๋ ์ฌ๊ท ํธ์ถ์ ๋ฉ์ถ๋ ์กฐ๊ฑด์
๋๋ค.
1.
์ฌ๊ท ํจ์๋ ์คํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋๋ฌด ๊น์ ์ฌ๊ท๋ ์คํ ์ค๋ฒํ๋ก์ฐ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
2.
์ข
๋ฃ ์กฐ๊ฑด์ด ์๊ฑฐ๋ ์๋ชป ์ค์ ๋๋ฉด ๋ฌดํ ์ฌ๊ท์ ๋น ์ง ์ ์์ต๋๋ค.
3.
๋๋ก๋ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
์ฌ๊ทํจ์ ์์์ฝ๋ (ํฉํ ๋ฆฌ์ผ)
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
void main() {
print(factorial(5)); // ์ถ๋ ฅ: 120
}
Dart
๋ณต์ฌ