• 회원가입
  • 로그인
  • 구글아이디로 로그인

GO - Functions (고랭 함수)

791  
목차
  1. 함수 생성(= 정의)
  2. 함수 호출
  3. 함수명 작성 규칙
  4. 독립변수(= 인수) / 매개변수
  5. 단일 매개변수 갖는 함수
  6. 여러 매개변수 갖는 함수
  7. 값 반환 - return() 함수
  8. 명명된 반환값
  9. 변수에 반환값 저장
  10. 여러 반환값
  11. 재귀함수

 

함수 생성(= 정의)

 

  • 함수는 프로그램에서 반복 사용 가능한 명령문 블록.
  • 함수는 페이지 로드 시 자동 실행 되는 건 아님.
  • 함수는 호출할 때만 실행됨.
  • 함수는 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 반환



제목
GO - Home (고랭 입문)
GO - Intro (고랭 소개)
GO - Start (고랭 시작)
GO - Syntax (고랭 구문)
GO - Comments (고랭 주석)
GO - Variables (고랭 변수)
GO - Constants (고랭 상수)
GO - Output (고랭 출력)
GO - Data Types (고랭 데이터타입) - 자료형
GO - Arrays (고랭 배열)
GO - Slices (고랭 슬라이스)
GO - Operators (고랭 연산자)
GO - Conditions (고랭 IF조건문)
GO - switch (고랭 스위치조건문)
GO - For Loops (고랭 FOR반복문)
GO - Functions (고랭 함수)
GO - Maps (고랭 맵)
목록
찾아주셔서 감사합니다. Since 2012