[go] Go 언어에서 함수 포인터

Go 언어는 함수를 first-class citizens(일급 객체)로 취급합니다. 이는 함수를 변수에 할당하고, 다른 함수의 매개변수로 전달하거나, 반환값으로 사용할 수 있다는 것을 의미합니다. Go 언어에서는 함수 포인터를 사용하여 함수를 가리킬 수 있습니다. 함수 포인터를 사용하면 프로그램에서 동적으로 함수를 선택하거나 호출할 수 있습니다.

함수 포인터 선언하기

함수 포인터를 선언하려면 func 키워드와 함수의 시그니처(매개변수와 반환값의 타입)를 사용합니다. 다음은 함수 포인터의 선언 예시입니다.

var funcPointer func(int, int) int

위의 예시에서는 funcPointer라는 변수를 선언하고, int 타입의 두 개의 매개변수를 가지고 int 타입의 반환값을 가지는 함수를 가리키도록 설정합니다.

함수 포인터 사용하기

함수 포인터를 사용하여 함수를 호출하려면 함수 포인터에 실제 함수를 할당해야 합니다. 다음은 함수 포인터를 사용하여 두 숫자를 더하는 함수를 호출하는 예시입니다.

function add(a, b int) int {
    return a + b
}

func main() {
    var funcPointer func(int, int) int
    funcPointer = add
    result := funcPointer(5, 3)
    fmt.Println(result) // Output: 8
}

위의 예시에서 add 함수는 두 숫자를 더한 결과를 반환하는 함수입니다. main 함수에서는 funcPointer 변수에 add 함수를 할당한 후 해당 함수를 호출하여 결과를 출력합니다.

함수 포인터로 다른 함수에 전달하기

함수 포인터를 사용하여 다른 함수에 함수를 전달하는 것도 가능합니다. 이를 통해 함수를 동적으로 선택하거나 조합하여 사용할 수 있습니다. 다음은 함수 포인터를 사용하여 다른 함수의 매개변수로 전달하는 예시입니다.

func multiply(a, b int) int {
    return a * b
}

func calculate(operation func(int, int) int, a, b int) int {
    return operation(a, b)
}

func main() {
    result := calculate(multiply, 5, 3)
    fmt.Println(result) // Output: 15
}

위의 예시에서는 calculate 함수가 operation 매개변수로 함수를 받아 해당 함수를 호출한 뒤 결과를 반환합니다. main 함수에서는 multiply 함수를 calculate 함수에 전달하여 결과를 출력합니다.

Go 언어에서 함수 포인터를 사용하는 것은 자유롭고 유연한 프로그래밍을 가능하게 합니다. 함수를 변수에 할당하거나 다른 함수의 매개변수로 전달하거나 반환값으로 사용하여 프로그램의 동작을 동적으로 조정할 수 있습니다.