Computer_Language/GO

[Go] 9. Go(golang)의 함수(func)

Joo-Topia 2019. 10. 20. 17:39

오늘 정리할 내용은 함수에 관한 내용이다.

특정 기능들을 기능별로 묶어서 구현하기 위해서 함수를 사용한다.

코드의 야이 줄어들고, 가독성도 좋아지고, 재사용 하기도 편리하다.

함수를 자주 호출하면 그만큼 오버헤드가 생긴다는 단점 말고는 사용하지 않을 이유가 없는 것 같다.

 

Go언어의 함수 기본 문법


package main

import "fmt"

func func_1() {
    fmt.Println("매개변수와 반환값이 없는 함수를 실행하였습니다.\n")
}

func main() {
    func_1()
}

매개변수와 반환 값이 없는 가장 기본적인 함수의 형태이다.
다른 언어들과 마찬가지로 가장 기본 문법에 조금씩 추가하면 반환 값과 매개변수를 갖는 함수를 선언할 수 있다.

 

여러 가지 변형된 함수를 정리한 코드를 실행시켜보았다.

package main

import "fmt"

func func_1() {
    fmt.Println("매개변수와 반환값이 없는 함수를 실행하였습니다.")
}

func func_2(a, b int) {
    fmt.Printf("매개변수 %d 와 %d 를 받은 함수를 실행하였습니다.\n", a, b)
}

func func_3(a, b int) (int, string) {
    fmt.Printf("매개변수 %d 와 %d 를 받고 int와 string을 리턴하는 함수를 실행하였습니다.\n", a, b)
    return 3, "문자열!"
}

func main() {
    func_1()
    func_2(2, 3)
    num, str := func_3(2, 3)
    fmt.Println(num, "과 '", str, "'을 반환 받았습니다.")
}

기본 형에서 조금만 변형을 하면 매개변수와 반환 값을 조절할 수 있다.

 

 

함수 정의 실습


package main

import "fmt"

func bubbleSort(nums []int) {
    var temp int
    leng := len(nums)
    for i := 0; i< leng; i++{
        for j := 0; j < leng - i - 1; j++{
            if nums[j] > nums[j + 1] {
                temp = nums[j]
                nums[j] = nums[j + 1]
                nums[j + 1] = temp
            }
        }
    }
}

func inputNums() ([]int){	
    var num int
    fmt.Scan(&num)
	
    var tmp_num int
    nums := make([]int, num, num)
    for i := 0; i< num; i++{
        fmt.Scan(&tmp_num)
        nums[i] = tmp_num
    }
    return nums
}

func outputNums(nums []int){
    for i := 0; i< len(nums); i++{
        fmt.Print(nums[i]," ")
    }
}

func main() {	
    nums := inputNums()
    bubbleSort(nums)
    outputNums(nums)
}

정수 n을 입력하면 n개의 정수가 들어갈 수 있는 slice를 만든다. (위 예제에서는 5)
5개의 정수를 순서대로 입력한다. (10, 39, 2, 111, 4)
마지막 줄에는 입력받은 정수들을 정렬한 결과가 출력된다. (bubble sort 알고리즘을 적용)

 

마무리


여러가지 함수 형을 정의하는 방법을 정리하고, 실제로 사용할 만한 함수를 만들어보는 실습을 진행하였다.

처음 프로그래밍 언어를 배울 때 함수의 개념을 공부하는 건 어려웠었지만 ,
다양한 프로그래밍 언어로 함수를 만드는 건 그렇게 어려운 일은 아닌 것 같다.

 

*구름 edu의 바로 실행해보면서 배우는 Go Lang"을 수강 후 정리한 내용입니다.
소스코드는 깃허브 저장소를 참고!