익명 함수
Coddy의 Golang의 함수와 포인터 코스 레슨 — 19개 중 9번째.
우리가 이미 배운 것은 이름을 가진 함수를 정의하는 방법이며, 함수를 호출해야 할 때 그 이름을 사용합니다. 하지만 이름이 없는 또 다른 유형의 함수가 있으며, 이러한 유형을 익명 함수(anonymous function)라고 부릅니다.
이것은 일반적인 함수처럼 작동하지만 작동 방식에 몇 가지 차이점이 있습니다. 이러한 함수를 사용하면 다른 곳에서 함수를 정의할 필요 없이 직접 동작을 정의할 수 있습니다.
익명 함수를 정의하는 방법의 예를 살펴보겠습니다:
b := func(x, y int) int { return x - y }
fmt.Println(b(100, 50))여기서 우리는 뺄셈을 수행하는 익명 함수를 저장하는 변수 b를 정의합니다. 함수를 호출할 때는 단순히 변수 이름인 b(100, 50)을 사용합니다.
또한 다른 함수로부터 결과값으로 익명 함수를 받을 수도 있습니다. 예를 들어:
func operation(a int) func(int) int {
if a == 1 {
return func(a int) int { return a + 10 }
} else {
return func(a int) int { return a * 10 }
}
}
func main() {
b := operation(1)
fmt.Println(b(14))
}여기서 우리는 operation이라는 일반 함수를 정의하며, 결과(반환 값)는 단순한 값이 아니라 익명 함수인 <strong>func(int) int</strong>가 됩니다.
반환 값을 변수 b에 할당합니다. operation 함수에 매개변수로 1을 전달했기 때문에, 실행될 블록은 다음과 같습니다:
return func(a int) int { return a + 10 }이제 익명 함수 b를 호출할 때 정수 값(예: 14)을 전달해야 합니다.
결과는 다음과 같습니다:
24이것은 a에 14(<strong>b(14)</strong>)를 전달했을 때 a + 10을 계산한 결과입니다.
챌린지
쉬움세 개의 정수 인자를 받는 익명 함수를 작성하세요.
만약 첫 번째 인자가 마지막 인자보다 크다면 모든 인자의 합을 반환하고, 그렇지 않으면 첫 번째 인자와 마지막 인자의 곱을 반환하세요.
함수의 결과를 result라는 이름의 변수에 저장하세요.
직접 해보기
package main
import "fmt"
func main() {
// 익명 함수를 정의하고 "result"라는 이름의 변수에 할당하세요.
// 결과를 출력합니다. 이 부분을 변경하지 마세요!
fmt.Println("Result:", result(2, 3, 4))
fmt.Println("Result:", result(8, 3, 4))
}