[Golang] Function 기초

2021-11-18 hit count image

Golang에서 Function(함수)를 선언하고 사용하는 방법에 대해서 알아봅시다.

개요

이번 블로그 포스트에서는 Golang에서 함수를 선언하고 사용하는 방법에 대해서 알아봅시다. 이 블로그 포스트에서 소개하는 코드는 다음 링크를 통해 확인하실 수 있습니다.

함수 정의

Golang에서 함수를 정의하고 사용하는 방법에 대해서 알아봅시다. 함수를 정의하고 사용하는 방법에 대해서 알아보기 위해, main.go 파일을 생성하고 다음과 같이 수정합니다.

package main

import "fmt"

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

func main() {
    c := Add(1, 2)
    fmt.Println(c)
}

함수는 다음과 같이 함수 정의 키워드인 func을 사용하여 정의합니다.

// func 함수명(매개변수...) 반환 타입 {
//     코드블록
// }
func Add(a int, b int) int {
    return a + b
}

만약, 매개 변수에서 같은 타입이 연속된다면, 다음과 같이 타입을 생략할 수 있습니다.

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

Public과 Private

Golang에서는 PublicPrivate이라는 키워드는 존재하지 않지만, 대소문자로 Public 함수와 Pirvate 함수를 구별합니다.

  • 함수명이 대문자로 시작: Public 함수
  • 함수명이 소문자로 시작: Private 함수

Public 함수는 다른 패키지에서 해당 함수를 사용하는 것이 가능하며, Private 함수는 해당 패키지내에서만 사용이 가능합니다.

멀티 반환 함수

Golang에서는 다음과 같이 함수가 다수의 값을 반환할 수 있습니다.

func Divide(a, b int) (int, bool) {
    if b == 0 {
        return 0, false
    }

    return a / b, true
}

func main() {
    c, success := Divide(10, 2)
    fmt.Println(c, success)
    d, success := Divide(10, 0)
    fmt.Println(d, success)
}

Golang에서는 다음과 같이 선언 대입문(:=)을 사용하여 변수를 선언할 때, 이미 변수명이 선언이 되어있다면, 컴파일 에러가 발생합니다.

func main() {
    c, success := Divide(10, 2)
    c, success := Divide(10, 0) // ERROR!
    fmt.Println(c, success)
}

선언 대입문(:=)은 변수를 새로 정의하고 할당한다는 의미이기에 중복된 이름으로 새 변수를 생성할 수 없기 때문입니다. 하지만, 멀티 반환 함수에서 반환받는 값을 저장하는 변수명이 하나만 달라도 컴파일 에러가 발생하지 않습니다.

func main() {
    c, success := Divide(10, 2)
    fmt.Println(c, success)
    d, success := Divide(10, 0)
    fmt.Println(d, success)
}

출력값에 이름 지정

멀티 반환 함수에서 다음과 같이 반환되는 값의 변수를 미리 선언하고 사용할 수 있습니다.

func Divide(a, b int) (result int, success bool) {
    if b == 0 {
        result = 0
        success = false
        return
    }

    result = a / b
    success = true
    return
}

함수 심화

이밖에도 함수의 다양한 기능들이 있습니다. 좀 더 깊게 함수에 대해 공부하고 싶은 분들은 아래에 블로그를 참고하시기 바랍니다.

완료

이것으로 Golang에서 함수를 정의하고 사용하는 방법에 대해서 알아보았습니다. 또한 Golang에서 PublicPrivate 함수를 구별하기 위해, 함수명의 첫글자를 사용한다는 것에 대해서 알게되었습니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts