We are Architect

함수(9) 본문

Programing/Go

함수(9)

the best infra 2025. 1. 9. 17:26

 

* 함수

  • 어떤 값을 넣으면 결과를 출력할 수 있도록 도와주는 기능.
  • 컴퓨터에서 반복되는 작업을 실행할 때 유용하게 사용하려고 만들어짐.
  • 함수는 코드 블록이다. 즉 프로그램에서는 어떤 코드를 묶어놓은 단위이다.

 

 

* go에서 함수 정의

// func : 함수 키워드 정의.
// ADD : 함수 이름.
// (a int, b int) : 매개변수(파라미터). 즉 함수에 입력될 값.
// int : 함수의 결과가 반환되는 타입.
// { } : 함수 코드 블록.
func ADD(a int, b int) int {
	// a + b의 값을 반환합니다.
    return a + b
}

 

 

 

* 함수 예제 - 1

package main

import (
	"fmt"
)

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

func main() {
	c := Add(3,6)
	fmt.Println(c)
}

 

  • 결과 값 출력

 

 

* 함수 예제 - 2

package main

import (
	"fmt"
)

//Divide 라는 함수를 정의
//(a, b int) : 입력 값이 int 타입으로 들어간다.
//(int bool) : 두 개의 반환(return)값의 타입을 적어줌.
func Divide(a, b int) (int, bool) {
	// 만약에 b가 0과 같냐?
	if b == 0{
    	// 0이면 첫번째 값을 0, 두번째 값을 false로 반환
    	return 0, false
	}
	// 0이 아니면 a / b, true 반환
 	return a / b, true
}

func main() {
	// 9, 3이 Divide()로 push됨 > c, bool 값이 반환.
	c, success := Divide(9, 3)
	fmt.Println(c, success)
	// 9, 0이 push됨 > d, bool 값이 반환.
	d, success := Divide(9, 0)
	fmt.Println(d, success)
    
}

 

  • 결과 값 출력

 

 

* 함수 예제 - 3

package main

import (
	"fmt"
)

//Divide 라는 함수를 정의
//(a, b int) : 입력 값이 int 타입으로 들어간다.
//(int bool) : 두 개의 반환(return)값의 타입을 적어줌.
func Divide(a, b int) (result int, success bool) {
	// 만약에 b가 0과 같냐?
	if b == 0{
    	// 0이면 첫번째 값을 0, 두번째 값을 false로 반환
 		result = 0
    	success = false
        
        // 반환 타입 부분에 변수 선언을 해서 리턴에 반환되는 변수 선언 x.
    	return
	}
	// 0이 아니면 a / b, true 반환
 	result = a / b
	success = true
    
	// 반환 타입 부분에 변수 선언을 해서 리턴에 반환되는 변수 선언 x.
	return
}

func main() {
	// 9, 3이 Divide()로 push됨 > c, bool 값이 반환.
	c, success := Divide(9, 3)
	fmt.Println(c, success)
	// 9, 0이 push됨 > d, bool 값이 반환.
	d, success := Divide(9, 0)
	fmt.Println(d, success)
    
}

 

  • 결과 값 출력
    • 위에 예제와 값이 같다. 단지 리턴 변수 선언을 함수 반환 타입 부분에 해줬을 뿐.

 

 

* 재귀 호출

  • 자기가 자기자신을 다시 부르는 함수.
  • Recursive Function이라고 한다.
  • 원래 호출된 곳으로 돌아간다.
  • 재귀 호출은 스택( LIFO: Last In, First Out )을 사용한다. 가장 먼저 들어온 것이 제일 나중에 나간다. 그리고 함수 실행이 끝나면 그 정보가 스택에서 제거된다.
  • 재귀 호출 함수 사용시 탈출 조건을 명시해줘야 한다.
    • 밑에서는 if문 부분에 조건으로 탈출.
package main

import "fmt"

func printNO(n int) {
	if n == 0 {
    	return
    }
    fmt.Println(n)
    printNO(n-1) // 다시 printNo를 호출
    fmt.Println("After", n)
}


func main() {
	printNO(3)
}

 

  • 결과 값 출력

'Programing > Go' 카테고리의 다른 글

if 문(11)  (0) 2025.01.11
상수(10)  (0) 2025.01.10
연산자(8)  (0) 2025.01.08
fmt 패키지를 통한 표준 입출력(7)  (0) 2025.01.06
변수 - 3(6)  (0) 2025.01.05