목차
- 함수 생성(= 정의)
- 함수 호출
- 함수명 작성 규칙
- 독립변수(= 인수) / 매개변수
- 단일 매개변수 갖는 함수
- 여러 매개변수 갖는 함수
- 값 반환 - return() 함수
- 명명된 반환값
- 변수에 반환값 저장
- 여러 반환값
- 재귀함수
함수 생성(= 정의)
- 함수는 프로그램에서 반복 사용 가능한 명령문 블록.
- 함수는 페이지 로드 시 자동 실행 되는 건 아님.
- 함수는 호출할 때만 실행됨.
- 함수는 func 키워드 사용해 정의.
[구문]
func FunctionName() {
// 실행 코드
}
함수 호출
- 함수는 호출할 때만 실행됨.
- FunctionName() 형태로 호출.
[예제1] - 함수는 호출해야만 실행됨.
package main
import ("fmt")
// 함수 정의
func hz() {
fmt.Println("홈짱닷컴 Homzzang.com")
}
func main() {
hz() // 함수 호출
}
결과값: 홈짱닷컴 Homzzang.com
[예제2] - 함수는 여러 번 호출 가능
package main
import ("fmt")
// 함수 정의
func hz() {
fmt.Println("홈짱닷컴 Homzzang.com")
}
func main() {
hz() // 함수 호출
hz() // 함수 호출
hz() // 함수 호출
}
결과값:
홈짱닷컴 Homzzang.com
홈짱닷컴 Homzzang.com
홈짱닷컴 Homzzang.com
함수명 작성 규칙
- 문자로 시작해야 함.
- 영문자, 숫자, 밑줄 ( A-z, 0-9, _ )만 사용 가능.
- 대소문자 구분함.
- 공백 포함 불가.
- 여러 단어 사용 시, (Camel, Pascal, Snake) CASE 규칙 사용 권장.
- 함수가 하는 일 반영해 이름 짓기.
독립변수(= 인수) / 매개변수
[독립변수 (인수)]
- 함수로 전달되는 데이터.
- 매개변수 자료형과 일치해야 함.
- 독립변수 개수는 매개변수 개수보다 작거나 같아야 함.
- 매개변수보다 더 많은 독립변수 존재 시, 에러 발생함.
[매개변수 특징]
- 함수로 전달되는 데이터 받는 접수 창구 역할.
- 함수 안에서 변수 역할 수행.
- 함수명 뒤의 소괄호 안에 기재.
- 원하는 만큼 쉼표( , ) 이용해 나열 가능.
- 매개변수 뒤에 데이터타입 기재.
- 여러 매개변수 존재 시, 그 만큼의 독립변수 필요.
- 매개변수 순서와 동일하게 독립변수 전달해야 함.
[매개변수 구문]
func FunctionName(param1 type, param2 type, param3 type) {
// 실행 코드
}
단일 매개변수 갖는 함수
package main
import ("fmt")
func hz(lang string) {
fmt.Println(lang, "공부")
}
func main() {
hz("HTML") // HTML 공부
hz("CSS") // CSS 공부
hz("JS") // JS 공부
}
여러 매개변수 갖는 함수
package main
import ("fmt")
func hz(lang string, intro string) {
fmt.Println(lang, intro, "공부")
}
func main() {
hz("HTML", "뼈대") // HTML 뼈대 공부
hz("CSS", "디자인") // CSS 디자인 공부
hz("JS", "기능") // JS 기능 공부
}
값 반환 - return() 함수
함수를 반환 형태로 정의 시, 함수명 뒤에 반환 타입 지정 필요.
[구문]
func FunctionName(param1 type, param2 type) type{
// 실행할 코드
return output
}
[예제] - 정수 형태로 반환하는 덧셈 함수
package main
import ("fmt")
func plus(x int, y int) int {
return x + y
}
func main() {
fmt.Println(plus(3, 4)) // 7
}
명명된 반환값
Go 언어는 함수 반환값에 이름 지정 가능.
[예제1]
package main
import ("fmt")
func plus(x int, y int) (answer int) {
answer = x + y
return
}
func main() {
fmt.Println(plus(3, 4)) // 7
}
[예제2] - 아래처럼 return 뒤에 반환값 이름 지정 가능.
package main
import ("fmt")
func plus(x int, y int) (answer int) {
answer = x + y
return answer
}
func main() {
fmt.Println(plus(3, 4)) // 7
}
변수에 반환값 저장
반환값을 변수에 저장 가능.
[예제]
package main
import ("fmt")
func plus(x int, y int) (result int) {
result = x + y
return
}
func main() {
sum := plus(3, 4)
fmt.Println(sum) // 7
}
여러 반환값
Go 함수는 한번에 여러 값 반환 가능.
[예제1] - 여러 반환값
package main
import ("fmt")
func hz(x string, y int) (txt string, open int) {
txt = x + ".com"
open = y + 1012
return
}
func main() {
fmt.Println(hz("Homzzang", 1000)) // Homzzang.com 2012
}
[예제2] - 여러 반환값을 각각의 변수에 저장
package main
import ("fmt")
func hz(x string, y int) (txt string, open int) {
txt = x + ".com"
open = y + 1012
return
}
func main() {
a, b := hz("Homzzang", 1000)
fmt.Println(a, b) // Homzzang.com 2012
}
[예제3] - 반환값 중 일부를 사용 안 하려면, 언더코어( _ ) 사용.
package main
import ("fmt")
func hz(x string, y int) (txt string, open int) {
txt = x + ".com"
open = y + 1012
return
}
func main() {
a, _ := hz("Homzzang", 1000)
fmt.Println(a) // Homzzang.com
}
[예제4] - 첫 번째 반환값 생략
package main
import ("fmt")
func hz(x string, y int) (txt string, open int) {
txt = x + ".com"
open = y + 1012
return
}
func main() {
_, b := hz("Homzzang", 1000)
fmt.Println(b) // 2012
}
재귀함수
함수 자신을 호출해서 중지 조건 도달 시 재귀 (= 거슬러 돌아나옴).
- 때론 더 효율적일 수도, 때론 더 비효율적일 수도 있음.
- 코드 작동 로직 파악이 어려움.
- 중지 조건 제대로 설정 안 하면, 무한반복 되니 주의.
[예제1]
package main
import ("fmt")
func count(x int) int {
if x == 5 {
return 0
}
fmt.Println(x)
return count(x + 1)
}
func main(){
count(1)
}
결과값:
1
2
3
4
PS. 코드 해설
count(1) 경우, 1 출력 후 count(2) 반환
count(2) 경우, 2 출력 후 count(3) 반환
count(3) 경우, 3 출력 후 count(4) 반환
count(4) 경우, 4 출력 후 count(5) 반환 - 0 반환 후 중단
[예제2] - 4팩토리얼 구하기 (= 즉, 4 X 3 X 2 X 1)
package main
import ("fmt")
func factorial(x float64) (y float64) {
if x > 0 {
y = x * factorial(x-1)
} else {
y = 1
}
return
}
func main() {
fmt.Println(factorial(4)) // 24 (즉, 4 X 3 X 2 X 1)
}
결과값: 24
PS. 코드 설명
factorial(4) 경우, 4 * factorial(3) 반환
factorial(3) 경우, 3 * factorial(2) 반환
factorial(2) 경우, 2 * factorial(1) 반환
factorial(1) 경우, 1 * factorial(0) 반환
factorial(0) 경우, 1 반환
factorial(1) 경우, 1 * 1 = 1 반환
factorial(2) 경우, 2 *1 = 2 반환
factorial(3) 경우, 3 *2 = 6 반환
factorial(4) 경우, 4 * 6 = 24 반환
최신댓글