Search

ํ•จ์ˆ˜

ํ•จ์ˆ˜

์ž…๋ ฅ, ์—ฐ์‚ฐ, ๋ฐ˜ํ™˜ ๊ตฌ์กฐ๋กœ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ์˜ ๋ชจ์Œ

ํŠน์ง•

โ€ข
์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ
โ€ข
ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์กฐํ™” ๋ฐ ๋ชจ๋“ˆํ™”
โ€ข
์œ ์ง€๋ณด์ˆ˜์˜ ์šฉ์ด์„ฑ
โ€ข
์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ

ํ•จ์ˆ˜

โ€ข
ํ•จ์ˆ˜ ์ •์˜
โ—ฆ
ํ•จ์ˆ˜ ํ˜ธ์ถœ
โ—ฆ
๋งค๊ฐœ๋ณ€์ˆ˜
โ–ช
์œ„์น˜ ๋งค๊ฐœ๋ณ€์ˆ˜
โ–ช
์ด๋ฆ„ ๋งค๊ฐœ๋ณ€์ˆ˜
โ–ช
ํ•„์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ 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
๋ณต์‚ฌ

๋งค๊ฐœ๋ณ€์ˆ˜ ์ •๋ฆฌ

์œ„์น˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ „๋‹ฌ
์ด๋ฆ„ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ณ€์ˆ˜๋ช…: ๊ฐ’ ์ด๋ฆ„ ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ
์œ„์น˜ ํ•„์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ์ „๋‹ฌํ•ด์•ผ ํ•˜๊ณ , ์œ„์น˜ ์„ ํƒ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” []๋กœ ๊ฐ์‹ธ๊ณ  ๊ธฐ๋ณธ๊ฐ’ ์„ค์ • ๊ฐ€๋Šฅ
์ด๋ฆ„ ํ•„์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” {required}๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ˜๋“œ์‹œ ์ „๋‹ฌํ•ด์•ผ ํ•˜๊ณ , ์ด๋ฆ„ ์„ ํƒ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” {ํƒ€์ž… ๋ณ€์ˆ˜๋ช…=๊ธฐ๋ณธ๊ฐ’} ํ˜•ํƒœ๋กœ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

์ต๋ช… ํ•จ์ˆ˜

์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜
ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์ต๋ช… ํ•จ์ˆ˜๋Š” ์ฃผ๋กœ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์ฝœ๋ฐฑ ํ•จ์ˆ˜ (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
๋ณต์‚ฌ