[Go] Go 언어 함수(func) & 메소드(Method) 정리

2021. 1. 18. 16:43Programming Language/Go

반응형

Go 언어 함수

func는 여러 프로그래밍 언어(JavaScript, Python 등)에서 일반적으로 사용하는 함수형태와 유사하지만, Go 언어에서는 특별하게 다수의 리턴값을 가질 수 있으며, 또한 리턴할 변수를 미리 선정하고 리턴시킬 수 있다.


1) 한개의 값을 리턴하는 함수

예시) 자료형이 string인 한개의 값을 리턴하는 함수
func SingleReturn(name string) string {
    return name
}

2) 다수의 값을 리턴하는 함수

예시) 자료형이 int, string인 다수의 값을 리턴하는 함수
func ManyReturn(name string) (int, string) {    
    return len(name), name
}

3) 변수를 지정해서 리턴하는 함수

예시) 자료형이 int, string인 변수를 지정하여 값을 리턴하는 함수
func FixReturn(name string) (lenName int, upperName string) {   
      lenName = len(name)    
      upperName = strings.ToUpper(name)    
      return
}

4) 다수의 값을 인자로 받는 함수

예시) 자료형이 string인 다수의 값을 인자로 받는 함수
func ManyArgument(names ...string) {    
      fmt.Println(names)
}

Go 언어 메소드

메소드는 리시버(receiver)에 접근하여 작업이 가능하다. 또한 메소드는 같은 패키지에 있는 리시버만을 선언할 수 있으며, 주로 리시버는 구조체(Struct) 이다. 쉽게 말해 함수에 리시버가 있으면 메소드이다.


1) 벨류 리시버(Value Receiver)로 필드 접근

* Value Receiver는 리시버에 해당하는 새로운 객체를 복제하기 때문에 실제 객체에는 영향이 없다.

예시) person 구조체의 모든 필드에 값을 삽입하고, 출력하시오.
type Person struct {    
    name    string    
    age     int    
    address string
}

func (p Person) searchPerson() {    
     fmt.Println(p.name, p.age, p.address)
}

func main() {
    myInfo := Person{"hyunmin", 28, "서울시 용산구"}
    myInfo.searchPerson()
}
// 출력결과 : hyunmin 28 서울시 용산구

2) 포인터 리시버(Pointer Receiver)로 필드 접근

* Pointer Receiver는 실제 객체에 접근하여 작업이 가능하다.(수정, 검색 등)

예시) person 구조체의 모든 필드에 값을 수정하고 출력하시오.
type Person struct {
	name    string
	age     int
	address string
}

func (p *Person) searchPerson() {
	fmt.Println(p.name, p.age, p.address)
}
func (p *Person) changePerson() {
	p.name = "donghun"
	p.age = 27
	p.address = "서울시 강서구"
}

func main() {
	myInfo := Person{"hyunmin", 28, "서울시 용산구"}
	// 수정 전
	myInfo.searchPerson()
	// 수정 작업
	myInfo.changePerson()
	// 수정 후
	myInfo.searchPerson()
}

// 출력 결과
// hyunmin 28 서울시 용산구
// donghun 27 서울시 강서구

반응형