🔥 함수 값
함수는 다른 값들과 마찬가지로 값으로 취급되어진답니다. 함수를 다른 값들처럼 전달할 수 있어요.
함수 값은 함수의 인자나 반환 값으로 사용될 수 있죠.
package main import ( "fmt" "math" ) func compute(fn func(float64, float64) float64) float64 { return fn(3, 4) // 전달받은 함수 fn을 호출하면서 3과 4를 인자로 전달하죠. } func main() { // hypot 함수 변수를 선언하고, 익명 함수를 할당하네요. hypot := func(x, y float64) float64 { return math.Sqrt(x*x + y*y) // x와 y의 제곱의 합에 제곱근을 구해 반환해요. } fmt.Println(hypot(5, 12)) // hypot 함수를 직접 호출하면서 5와 12를 인자로 전달하죠. fmt.Println(compute(hypot)) // compute 함수를 호출하면서 hypot 함수를 인자로 전달해요. fmt.Println(compute(math.Pow)) // compute 함수를 호출하면서 math.Pow 함수를 인자로 전달하네요. }
go
위 코드에서 compute
함수는 함수를 인자로 받아 그 함수를 호출한 결과를 반환하는 함수랍니다. compute
함수의 인자로 전달되는 함수는 float64
타입의 매개변수 두 개를 받아 float64
타입의 값을 반환하는 함수예요.
main
함수에서는 hypot
이라는 함수 변수를 선언하고 익명 함수를 할당했어요. 이 익명 함수는 두 개의 float64
타입 매개변수를 받아 그 제곱의 합에 제곱근을 구해 반환하는 함수죠.
그리고 hypot
함수를 직접 호출하여 결과를 출력하고, compute
함수를 호출하면서 hypot
함수와 math.Pow
함수를 인자로 전달하여 결과를 출력하고 있어요.
이처럼 함수는 값으로 취급되어 다른 함수의 인자나 반환 값으로 사용될 수 있답니다. 이를 통해 함수를 매개변수로 전달하여 다양한 동작을 수행하는 함수를 만들 수 있게 되죠.
함수 값을 활용하면 코드의 재사용성과 유연성을 높일 수 있어요. 함수를 값으로 다룰 수 있다는 것은 Go 언어의 강력한 특징 중 하나랍니다!
그런데 위 코드에서 func(float64, float64) float64
와 같이 함수 타입을 반복해서 사용하고 있죠? Go 언어에서는 타입 별칭(type alias)을 사용하여 함수 타입에 별칭을 지정할 수 있어요. 이를 통해 함수 타입을 더 간결하고 가독성 있게 표현할 수 있답니다.
package main import ( "fmt" "math" ) // BinaryOperation 타입 별칭을 선언하여 func(float64, float64) float64 함수 타입을 간결하게 표현해요. type BinaryOperation func(float64, float64) float64 func compute(fn BinaryOperation) float64 { return fn(3, 4) // 전달받은 함수 fn을 호출하면서 3과 4를 인자로 전달하죠. } func main() { // hypot 함수 변수를 선언하고, 익명 함수를 할당하네요. hypot := func(x, y float64) float64 { return math.Sqrt(x*x + y*y) // x와 y의 제곱의 합에 제곱근을 구해 반환해요. } fmt.Println(hypot(5, 12)) // hypot 함수를 직접 호출하면서 5와 12를 인자로 전달하죠. fmt.Println(compute(hypot)) // compute 함수를 호출하면서 hypot 함수를 인자로 전달해요. fmt.Println(compute(math.Pow)) // compute 함수를 호출하면서 math.Pow 함수를 인자로 전달하네요. }
go
위 코드에서는 BinaryOperation
이라는 타입 별칭을 선언하여 func(float64, float64) float64
함수 타입을 간결하게 표현했어요. 이제 BinaryOperation
타입을 사용하여 함수 타입을 더 읽기 쉽게 나타낼 수 있죠.
compute
함수의 매개변수 타입으로 BinaryOperation
을 사용하고 있네요. 이를 통해 compute
함수가 어떤 타입의 함수를 인자로 받는지 명확하게 표현할 수 있답니다.
타입 별칭을 사용하면 함수 타입을 간결하게 표현할 수 있을 뿐만 아니라, 코드의 가독성과 유지보수성도 향상시킬 수 있어요. 특히 함수 타입이 여러 곳에서 사용되는 경우, 타입 별칭을 사용하면 코드의 일관성을 유지하면서도 타이핑의 양을 줄일 수 있죠.
함수 값과 타입 별칭을 함께 활용하면 코드의 재사용성과 유연성을 높이면서도 가독성을 향상시킬 수 있어요. Go 언어에서는 함수를 값으로 다룰 수 있고, 함수 타입에 별칭을 지정할 수 있다는 것이 큰 장점이랍니다!