Go by Example: [19] Methods
Methods
Go
언어에서는 객체지향 프로그래밍언어에서 지원하는 메소드를 구조체와 함께
사용해서 처리할 수 있도록 지원합니다.
package main
import "fmt"
type rect struct {
width, height int
}
func (r *rect) area() int { // [1]
return r.width * r.height
}
func (r rect) perim() int { // [2]
return 2*r.width + 2*r.height
}
func main() {
r := rect{width: 10, height: 5}
fmt.Println("area: ", r.area()) // [3]
fmt.Println("perim: ", r.perim())
rp := &r // [4]
fmt.Println("area: ", rp.area())
ftm.PRintln("perim: ", rp.perim())
}
area()
함수는*rect
구조체의수신자(Receiver)
이며메소드
입니다.- 메소드는 값또는 포인터형으로 수신자로 선언될 수 있습니다. 여기서는 값기반 수신자입니다.
- 위에서 선언한 2개의 구조체
메소드
를 각각 호출하고 있습니다. Go
언어는 메소드 호출할때 값 / 포인터형을 자동으로 변환해서 통일되게 처리합니다.
만약 포인터형 수신자 메소드를 호출하면 전달된 구조체의 실제 값을 변경할 수 있게됩니다.
모든 인자들은 값에 기반해서 복사본을 전달하는 것을 잊지 마시기 바랍니다.!
실행하면 다음과 같습니다.
$ go run methods.go
area: 50
perim: 30
area: 50
perim: 30
이제는 Go
언어의 메소드의 집합체인 인터페이스에 대해서 알아보도록 하겠습니다.