Connecting

Go 언어 함수 사용하기 본문

Go 언어

Go 언어 함수 사용하기

팬도라 2020. 7. 14. 14:54
반응형

함수

함수(function)란 어떠한 입력을 통해서 어떠한 출력 매개변수로 맵핑하는 독립적인 코드 영역입니다.

Go 언어에서는 main 함수가 기본이지만 필요에 따라서 여러 함수 선언을 통해서 다양한 역할을 담당하는 함수를 선언하여 사용할 수 있습니다. 이렇게 기능별 함수를 선언하면 해당 역할을 담당하는 함수를 재사용 할 수 있으며, 코드를 간결하게 작성할 수 있습니다. 다음 예제는 함수를 사용한 기본 예제입니다.

package main

import f "fmt"

func hello() {
  f.println("Hello")
}

func main() {
  hello()
  world()
}

func world() {
  f.println("world!")
}

일부 언어의 경우 함수를 선언하기 위해서는 정의한 함수를 main 보다 위에 써주거나 함수가 존재한다는 정의를 해줘야 하지만 Go 언어는 함수를 정의할 때 위치 제약이 없습니다. 하지만 다음과 같이 코드를 작성하는 경우 에러가 발생합니다.

func hello() // 컴파일 에러가 발생함, 함수 선언의 위치는 상관이 없으나 {}의 위치는 반드시 지켜야함
{
  f.println("Hello")
}

Go 언어에서 함수를 선언하고 매개변수를 넘기거나 결과값을 리턴받을 때는 다음과 같이 작성합니다.

func sum(a int, b int) int { // int형 변수 2개를 입력받고, int형 변수 하나를 반환할 때
    return a + b
}

func subtract(a int, b int) (r int) { // 리턴할 값을 지정할 때
    r = a - b
    return r
}

Go 언어에서는 리턴값을 여러개 지정할 수 있습니다. 이를 사용하고자 할때는 다음과 같이 사용합니다.

func division(a int, b int) (int, int) { // 리턴값을 여러개 지정할 수 있음
    value := a / b
    remainder := a % b

    return value, remainder
}

만약에 인자의 갯수의 상관없이 함수를 호출하고 싶다면 가변함수를 사용하면 됩니다. 가변함수를 통해 인자값을 넘기는 경우에는 ... 을 사용합니다. 다음 예제를 통해 살펴보도록 하겠습니다.

func multiplication(n ...int) int {

    calculation := 2
    for _, value := range n {
        calculation *= value
    }

    return calculation
}

지금까지 Go 언어에서의 함수의 특징을 살펴보았습니다. 다음 예제를 통해 함수 사용법을 정리합니다.

package main

import f "fmt"

func main() {

    a := 10
    b := 20

    result := sum(a, b)
    f.Println(result)

    f.Println(subtract(30, 20))

    f.Println(division(4, 3))
    _, remainder := division(456, 25)
    f.Println("나머지 : ", remainder)

}

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

func subtract(a int, b int) (r int) {
    r = a - b
    return r
}

func division(a int, b int) (int, int) {
    value := a / b
    remainder := a % b

    return value, remainder
}
package main

import f "fmt"

func main() {

    f.Println("가변 함수")

    result := multiplication(2, 3, 4, 5)
    f.Println(result)

    slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    f.Println(sliceSum(slice...))

    r := func(a int, b int) int {
        return a + b
    }(1, 3)
    f.Println(r)

}

func multiplication(n ...int) int {

    calculation := 2
    for _, value := range n {
        calculation *= value
    }

    return calculation
}

func sliceSum(n ...int) int {

    result := 0
    for _, value := range n {
        result += value
    }

    return result
}
Comments