func Add(a int, b int) int {
return a + b
1) 함수 키워드: func 를 사용하여 함수 정의를 알린다.
2) 함수명: 그 뒤에 함수 명이 온다; Add, 명명규칙은 변수명과 같다. 첫 글자가 대문자인 함수는 패키지 외부로 공개되는 함수이다.
3) 소괄호 안에 매개변수를 넣는다. 매개변수는 함수 코드 수행시 필요한 입력값이다. 매개변수가 필요하지 않으면 비워둔다.
4) 반환 타입이 온다. 위에선 int이다. 반환하는 값이 있으면 적고 없으면 비워둔다.
5) 중괄호로 함수 코드블록을 표시한다. Go 언어에서는 함수 코드 블록의 시작을 알리는 중괄호 {가 함수를 정의하는 라인과 항상 같은 줄에 있어야 한다.
package main
import "fmt"
func Add(a int, b int) int { // 입력 값, 반환 값 모두 정수
return a+b
}
func main() {
c:= Add(3, 6)
fmt.Println(c)
}
1) Add() 함수를 정의. 두 정수 타입 매개변수 a, b 를 입력으로 받아서 그 둘의 합을 반환
2) Add() 함수 호출하여 그 반환값을 c에 저장
3) c를 출력
argument; 인자: 함수를 호출할 때 입력하는 값이다.
parameter; 매개변수: 함수가 외부로 부터 입력받는 변수다.
함수를 호출하며 입력한 값은 실제 함수에 어떻게 전달될까? 보낸 값을 그대로 사용하는 것이 아니라 값을 복사해서 사용하게 된다.
c := Add(3, 6) // 함수 호출
func Add(a int, b int) int { // 매개변수 생성 및 초기화
return a + b // 값 반환 (복사)
}
1) Add () 함수를 호출한다.
2) 매개변수를 선언하고 입력한 인숫값을 복사한다. 여기서는 3, 6이 a, b 에 값으로 복사된다. 이건 마치 함수 내에서 선언한 a, b 두 변수에 초깃값으로 3과 6을 대입하는 것과 같다.
3) return 키워드를 통해 함수 결과가 반환된다. 반환은 값을 전달한다.
4) 반환된 값은 함수가 호출된 곳을 대체하는 것과 같다.
5) 호출한 함수가 종료되면 함수에서 사용한 지역 변수에 접근할 수 없습니다. return 으로 함수 결과가 반환되면서 함수가 즉시 종료되어 함수를 호출했던 호출 위치로 명령 포인터가 되돌아가서 수행된다.
c:= Add(3, 6)
c:= 9
6) c에 반환값이 복사(대입)된다.
*) 여기서 핵심은 '인수는 매개변수로 복사된다. 매개변수와 함수 내에서 선언된 변수는 함수가 종료되면 변수 범위를 벗어나서 접근하지 못한다.'
먼저 들어온 데이터가 마지막에 나가는 First In, Last Out 구조의 Stack 형태이다.
값을 여러개 반환 한다.
func Divide (a, b int) (result int, success bool) {
if b==0{
result = 0
success = false
return // 값을 지정하지 않은 리턴문
출력 값으로 매개변수에서 result int, success bool 을 명시했기 때문에 리턴문에 이를 생략하고 반환할 수 있다.