개요
이번 블로그 포스트에서는 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에서는 Public과 Private이라는 키워드는 존재하지 않지만, 대소문자로 Public 함수와 Private 함수를 구별합니다.
- 함수명이 대문자로 시작:
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에서 Public과 Private 함수를 구별하기 위해, 함수명의 첫글자를 사용한다는 것에 대해서 알게되었습니다.
제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!
앱 홍보
Deku가 개발한 앱을 한번 사용해보세요.Deku가 개발한 앱은 Flutter로 개발되었습니다.관심있으신 분들은 앱을 다운로드하여 사용해 주시면 정말 감사하겠습니다.














![[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통](https://img1c.coupangcdn.com/image/affiliate/banner/7cba8cb0601eebaf88a17a0c3cf65a63@2x.jpg)