본 게시물은 Tucker의 Go언어 프로그래밍을 참고해 작성한 게시물입니다.
http://www.yes24.com/Product/Goods/99108736
Tucker의 Go 언어 프로그래밍 - YES24
게임 회사 서버 전문가가 알려주는 Go 언어를 내 것으로 만드는 비법구글이 개발한 Go는 고성능 비동기 프로그래밍에 유용한 언어이다. 『Tucker의 Go 언어 프로그래밍』은 Go 언어로 ‘나만의 프로
www.yes24.com
함수를 호출하면 생기는 일
인자 (argument) : 함수 호출할 때 입력하는 값
매개변수(parameter): 함수가 외부로부터 받는 변수
함수를 호출하며 입력한 값을 실제 함수에 그대로 사용하는 것이 아니라 값을 복사해서 사용하게 된다.
func Add(a int, b int) int {
return a + b
}
func main() {
c := Add(3, 6)
fmt.Println(c)
}
1. 3과 6을 a와 b에 복사한다.
2. 반환값을 c에 전달 한다.
3. 함수가 종료되면 함수에서 사용한 지역변수에 접근 불가하다.
4. 함수 결과가 반환되면서 함수가 즉시 종료되어 함수를 호출했던 호출 위치로 명령 포인터가 되돌아가서 수행된다.
⚠️ 인수는 매개변수로 복사된다. 매개변수가 함수 내에서 선언된 변수는 함수가 종료되면 변수 범위를 벗어나서 접근하지 못한다.
함수를 쓰는 이유
함수를 사용하면 반복 사용되는 코드를 묶을 수 있다.
함수를 이용해서 중복 코드를 제거하여 코드를 간결하게 만들 수 있다.
멀티 반환 함수
함수는 값을 여러개 반환할 수 있다.
func Divide(a, b int) (int, bool) {
if b == 0 {
return 0, false
}
return a / b, true
}
func main() {
c, success := Divide(3, 1)
fmt.Println(c, success) // 3, true
c, success = Divide(2, 0)
fmt.Println(c, success) // 0, false
}
변수명을 지정해서 반환하기
함수 선언부에 반환 타입을 적을 떄 변수명까지 지정해주면 함수 결과를 반환할 때 명시적으로 반환할 값을 지정하지 않아도 된다.
func Divide(a, b int) (result int, success bool) {
if b == 0 {
result = 0
success = false
return // 명시적으로 반환할 값을 지정하지 않은 return문
}
result = a / b
success = true
return
}
func main() {
c, success := Divide(3, 1)
fmt.Println(c, success) // 3, true
c, success = Divide(2, 0)
fmt.Println(c, success) // 0, false
}
재귀 호출
재귀 호출이란 함수안에서 자기 자신 함수를 다시 호출하는 것을 말한다.
func printNo(n int) {
if n == 0 { // 재귀 호출 탈출 조건
return
}
fmt.Println(n) // 재귀 호출
printNo(n - 1)
fmt.Println("After", n) // 재귀 호출 이후 출력
}
func main() {
printNo(3) // 함수 호출
}
3
2
1
After 1
After 2
After 3
⚠️ 재귀 호출을 사용할 때는 항상 탈출 조건을 정해야한다. 재귀 호출이 종료되는 시점을 명확히하지 않으면 재귀 호출이 무한히 반복되어 프로그램이 비정상종료된다.
'Programming language > Golang' 카테고리의 다른 글
[Go] 11 for문 (0) | 2022.01.15 |
---|---|
[Go] 10 switch (0) | 2022.01.12 |
[Go] 09 조건문 (0) | 2022.01.12 |
[Go] 08 상수 (0) | 2022.01.11 |
[Go] 06 연산자 (0) | 2022.01.10 |