9.1. 프로그램언어 고(Go)의 함수 정의하기

프로그램언어 고(Go)에서의 기본적인 함수 정의 방법

프로그램언어 고(Go)에서 함수를 정의하는 기본적인 방법은 다음과 같습니다.

func 함수이름(매개변수 목록) 반환형 {
    함수 본문
}

func 키워드를 사용하여 함수를 정의합니다. 그리고 함수 이름, 매개변수 목록, 반환형을 정의합니다.
매개변수 목록과 반환형은 선택적으로 생략할 수도 있습니다.

func 함수이름() {
    함수 본문 
}

이렇게 매개변수와 반환형을 생략한 형태로 정의할 수도 있습니다.

함수 본문에는 함수에서 수행할 로직을 작성합니다. 보통은 변수 선언, 조건문, 반복문 등을 사용하여 로직을 정의합니다.

func sum(a int, b int) int {
    return a + b
}

이 예제 함수는 두 개의 int형 매개변수 a, b를 받아서 이를 더한 값을 int형으로 반환합니다.
return 키워드를 사용하여 반환값을 지정할 수 있습니다.

이 외에도 매개변수에 타입과 인자 이름을 모두 작성할 수 있고, 여러 개의 반환값을 지정할 수 있습니다.
고루틴을 사용하여 병렬 처리도 가능합니다.

고(Go)의 함수는 다양한 기능을 유연하게 정의하고 사용할 수 있도록 설계되어 있습니다. 기본 문법만 숙지한다면 복잡한 로직을 쉽고 간결하게 구현할 수 있습니다.

프로그램언어 고(Go)에서의 매개변수를 가진 함수 정의하기

프로그램언어 고(Go)에서 매개변수를 가진 함수를 정의할 때는 다음과 같은 문법을 사용합니다.

func 함수이름(매개변수 목록) 반환형 {
    함수 본문
}

예를 들어 두 정수를 받아서 더하기를 수행하는 함수는 다음과 같이 정의할 수 있습니다.

func add(x int, y int) int {
    return x + y
}

이 예제에서 add라는 함수 이름을 가진 함수를 정의했습니다. 이 함수는 x와 y라는 int 형 매개변수를 받아들입니다. 함수 본문에서는 x와 y를 더한 값을 반환합니다. 반환형도 int로 정의했습니다.

이렇게 매개변수를 사용하면 함수 입장에서 값을 입력받아 처리할 수 있습니다. 매개변수의 형식과 개수, 반환형도 함수의 용도에 따라 유연하게 정의할 수 있습니다.

예를 들어 문자열 2개를 받아서 연결하는 함수는 다음과 같이 정의할 수 있습니다.

func concatenate(a, b string) string {
    return a + b
} 

매개변수와 반환형을 string으로 정의했고, 본문에서는 입력받은 문자열을 단순히 연결해서 반환하고 있습니다.

이외에도 매개변수를 사용한 다양한 함수를 유연하게 정의할 수 있습니다. 매개변수와 반환형의 적절한 사용은 함수의 재사용성과 모듈화를 높이는데 도움이 됩니다.

프로그램언어 고(Go)에서의 다중 매개변수를 가진 함수 정의하기

프로그램언어 고(Go)에서 다중 매개변수를 가진 함수를 정의할 때에는 함수 이름 뒤에 여러 개의 매개변수를 쉼표로 구분하여 정의하면 됩니다.

func 함수이름(매개변수1 자료형, 매개변수2 자료형, ...) 반환형 {
    // 함수 본문
    return 반환값
}

예를 들어 2개의 int형 매개변수와 1개의 string형 매개변수를 받는 함수는 다음과 같이 정의할 수 있습니다.

func printInfo(age int, height int, name string) {
    fmt.Println(age, height, name) 
}

위 함수 printInfo는 age와 height라는 int형 매개변수 2개와 name이라는 string형 매개변수 1개를 파라미터로 받아들입니다. 함수 본문에서는 받아들인 매개변수를 출력하는 로직이 구현되어 있습니다.

이 함수를 호출할 때에는 다음과 같이 실제 파라미터를 순서대로 전달하면 됩니다.

printInfo(10, 170, "홍길동")

위와 같이 매개변수의 개수와 자료형, 순서에 맞추어 파라미터를 전달하면 함수 내부에서 원활히 값을 처리할 수 있습니다.

다중 매개변수를 사용하면 하나의 함수에서 복数의 데이터를 입력받아 처리할 수 있기 때문에 함수의 유연성과 재사용성을 높일 수 있습니다. 필요에 따라 매개변수를 추가하거나 변경할 수도 있습니다.

프로그램언어 고(Go)에서의 가변 매개변수를 가진 함수 정의하기

프로그램언어 고(Go)에서 가변 매개변수를 가진 함수를 정의하기 위해서는 함수 매개변수名 앞에 …을 붙여주면 됩니다.

이를 통해 0개 이상의 매개변수를 받을 수 있는 가변 인자 함수를 정의할 수 있습니다.

예를 들어 다음과 같은 코드로 가변 인자 함수를 정의할 수 있습니다.


package main

import "fmt"

// 가변 인자 함수 정의
func sum(nums ...int) int {
    total := 0
    for _, num := range nums {
        total += num
    }
    return total
}

func main() {
    // 가변 인자로 값 전달
    fmt.Println(sum())
    fmt.Println(sum(1, 2))
    fmt.Println(sum(1, 2, 3)) 

    // 슬라이스로 값 한번에 전달
    nums := []int{1, 2, 3, 4} 
    fmt.Println(sum(nums...))
}

위 코드에서 sum 이라는 가변 인자 함수를 정의하였습니다.

매개변수명 앞에 …을 붙임으로써 nums 라는 int 형 슬라이스를 매개변수로 받을 수 있습니다.

따라서 인자의 개수에 상관없이 호출할 수 있습니다.

main 함수에서 보듯이 인자 하나도 전달하지 않거나, 개별 값을 직접 전달할 수도 있고, 슬라이스를 통해 한번에 전달할 수도 있습니다.

이러한 가변 인자 함수는 인자의 개수를 동적으로 정의할 수 있어 유용합니다.

프로그램언어 고(Go)에서의 함수 내부에서의 함수 정의하기

프로그램언어 고(Go)에서 함수 내부에서 다른 함수를 정의할 수 있습니다. 이를 ‘nested function(중첩 함수)’라고 합니다.

중첩 함수는 바깥쪽 함수 내부에서만 정의하고 호출할 수 있는 private한 함수입니다.

다음은 중첩 함수의 정의 방법과 사용 예제입니다.


package main

import "fmt"

func main() {

  outer()

}

func outer() {

  fmt.Println("outer 함수 시작")

  // 중첩 함수 정의
  func nested() {
    fmt.Println("nested 함수 실행") 
  }

  nested() // 중첩 함수 호출

  fmt.Println("outer 함수 종료")

}

위 코드에서 nested() 함수는 outer() 함수 내부에서 정의되어 있습니다.

따라서 nested() 함수는 outer() 함수 내부에서만 호출할 수 있습니다.

main() 함수에서는 nested() 함수에 접근할 수 없습니다.

이처럼 중첩 함수를 사용하면 함수 범위(scope)를 구분지어 사용할 수 있어 프로그램 설계를 보다 유연하게 할 수 있습니다.

중첩 함수는 해당 함수를 정의한 함수에서만 사용할 수 있는 private한 성격의 함수라고 이해하시면 됩니다.

Leave a Comment