개발일기

Go - 함수의 사용법 및 응용 본문

프로그래밍 언어/Go

Go - 함수의 사용법 및 응용

Flashback 2022. 3. 15. 15:26
728x90
반응형

1. Go의 함수 선언법

Go에서 함수를 사용할 때는, func 키워드를 사용하여 함수를 선언한다. 다른 언어들의 경우는 보통 function 이라는 키워드를 사용하지만 Go에서는 func를 사용한다는 차이점이 있다.

func 함수명(파라미터) {
	... 함수 내용
}

func 키워드 뒤에 함수명을 쓰고, 괄호 안에 전달할 파라미터들을 나열하면 된다.

 

2. 함수 파라미터 추가

import "fmt"

func fruitName(fruit string, price int) {
	// 과일명과 가격을 전달받아 단순히 출력하는 함수
	fmt.Println(fruit)
	fmt.Println(price)
}

함수에 파라미터들을 전달하여 다음과 같이 간단하게 전달받은 값들을 출력하는 함수를 만들 수 있다.

 

함수를 호출하지 않고 선언만 한 경우에는 해당 함수는 실행되지 않는다. 함수를 사용하고자 할 경우에는 선언만 하는 것이 아니라 호출도 해야한다는 것을 꼭 기억해둬야 한다.

변수나 패키지 같은 경우는 선언만 하고 사용을 하지 않으면 에러가 발생한다. 하지만 함수와 같은 경우는 선언만 하고 호출하지 않아도 에러가 발생하지 않는다는 특징을 가지고 있다.

func main() {
	// 함수명(파라미터)
	fruitName("메론", 4000)
	// 함수를 선언만 하고 호출하지 않으면 해당 함수는 실행되지 않는다.
}

 

3. 동일 타입의 다중 파라미터 간략화

함수에 여러개의 동일한 타입을 가진 파라미터들을 전달받을 때, ...를 사용하여 간단하게 표현할 수 있다. 함수 선언부의 괄호 부분에 문자열인 경우는 (변수명 ...string). 정수형일 경우는 (변수명 ...int) 와 같은 형식으로 사용할 수 있다.   ...를 사용하면 해당 파라미터에 1개 이상의 동일 타입 값들이 들어갈 것이라는 것을 암시할 수 있도록 하는 것이다.

package main

func main() {
    juiceList("모구모구", "과일주스", "탄산음료")
    // 함수에 다수의 파라미터를 추가하여 호출
}

func juiceList(juice ...string) {
    // 동일한 타입을 가진 여러개의 파라미터를 전달받을 때, ...사용
    for i, v := range juice {
        println(i, v)
    }
}

 

4. 함수의 반환값(리턴값)

Go에서 함수값을 반환할 때, 다른 언어들과는 달리 여러개의 반환값을 반환할 수 있다.

함수에 반환할 값들은 파라미터 변수들을 나열한 괄호 뒷부분에 써줘야 한다.

func 함수명 ( 파라미터들 ) 반환타입 {
    ... 함수내용
    return 반환값
}

 

5. 다중 반환값(리턴값)

Go언어의 특성상 반환할 값들이 여러개이면 반환타입 또한 여러개가 된다. 이러한 경우에는 반환타입들을 괄호로 묶어 나열하면 된다.

func 함수명 ( 파라미터 ) ( 반환타입 나열 ) {
    ... 함수내용
    return 반환값 나열
}

 

package main

func main() {
    total, minus = sum(3, 5)
    println(total, minus)
}

func sum(a int, b int) (int, int) {
    value1 := a + b // a와 b의 합
    value2 := a - b // a와 b의 차
    
    // value1와 value2 반환
    return value1, value2
}

파라미터값들을 더하고 빼주는 함수를 만들어보았다. 해당 함수에는 합과 차를 반환해줘야 하기 때문에 value1와 value2 변수에 해당 계산의 값들을 대입하였다. 또한 반환값이 2개이기 때문에 괄호 안에 반환타입들을 써주었고, return 키워드 뒤에 반환할 변수명을 나열하였다.

반환한 값이 2개이기 때문에 변수에 함수를 할당할 때, 변수명을 두 개 써줘야 한다. total 변수에는 value1이라는 반환값이 들어가게 될 것이고, minus에는 value2라는 반환값이 들어가게 된다. 반환값과 할당받는 변수의 개수가 일치하지 않으면 에러가 발생하게 된다.

 

6. Named Return Parameter

package main

func main() {
    total, minus = sum(3, 5)
    println(total, minus)
}

func sum(a int, b int) (value1 int, value2 int) {
    value1 = a + b // a와 b의 합
    value2 = a - b // a와 b의 차
    
    // return키워드를 꼭 써줘야 한다.
    return
}

5번에서 사용했던 함수의 가독성을 더 높이기 위해 반환 변수명과 반환타입을 한 번에 정의하였다. 함수의 첫 부분에 반환 변수명과 타입을 정의하였기 때문에 함수내부에서 반환할 변수를 추가로 선언할 필요가 없어진다.

이 방법을 사용하면, 함수의 상단 부분만 확인하면 반환할 파라미터와 타입을 한 번에 확인할 수 있기에 가독성이 높아진다는 장점을 가지고 있다.

함수 끝 부분에는 return 키워드를 꼭 써주어야 한다. 함수 첫 부분에서 반환할 파라미터들을 나열했기 때문에 return 키워드만 쓰면된다. 만약 return을 생략하면 에러가 발생하기에 유의하여야 한다.

728x90
반응형

'프로그래밍 언어 > Go' 카테고리의 다른 글

Go - Slice의 len과 cap  (0) 2022.03.16
Go - 배열 사용법  (0) 2022.03.15
Go - for, for-range 반복문  (0) 2022.03.14
Go - 조건문 if / switch  (0) 2022.03.11
Go - 변수 선언과 사용  (2) 2022.02.22
Comments