Scroll Top

GOLANG – 메소드

GO

메소드

golang 에서 메소드란 구조체를 함수에서 변수로 받을 수 있다.

선언을 할 때  [ func (리시버명/변수명 구조체) 함수명() 리턴타입 {} ] 형태로 선언한다.

package main
import "fmt"

type Rectangle struct {
        width, height int
}

func (r Rectangle) area() int {
        return r.width * r.height
}

func main() {
        rect := Rectangle{10, 20}
        fmt.Println(rect.area())
}
┌──(daleji㉿LAPTOP)-[~]
└─$ go run method.go
200

[ func (변수명 구조체) 함수명() 리턴타입 {} ] 형태로 선언하면 이 함수 내부의 변수에 대한 구조체는 값이 복사가 되고 원래의 값은 변하지 않는다.

[ func (변수명 *구조체) 함수명() 리턴타입 {} ] 따라서 값도 변경하려면 func 선언할 때 구조체 앞에 [ * ] 를 추가하여 선언한다.

package main
import "fmt"

type Rectangle struct {
        width, height int
}

func (r Rectangle) a(a int) {
        r.width = r.width * a
        r.height = r.height * a
}

func (r *Rectangle) b(b int) { // 리시버 변수로 구조체 포인트를 받음
        r.width = r.width * b
        r.height = r.height * b
}

func main() {
        rect := Rectangle{10, 20}
        rect.a(10)
        fmt.Println(rect)

        rect.b(10)
        fmt.Println(rect)
}
┌──(daleji㉿LAPTOP)-[~]
└─$ go run method.go
{10 20}
{100 200}

만약 리시버 변수를 사용하지 않는다면 _ 으로 변수를 생략할 수 있다.

package main

import "fmt"

type Text struct {
}

func (_ Text) text() {
        fmt.Println("Text Method")
}

func main() {
        var a Text
        a.text()
}
┌──(daleji㉿LAPTOP)-[~]
└─$ go run interface.go
Text Method

Related Posts

Leave a comment

You must be logged in to post a comment.