Golang

[Golang] 메소드

GenieLove! 2022. 3. 12. 01:56
728x90
반응형

1.선언

func (c Client) info() int {//c Client - 리시버, info() - 메소드명
	return c.width
}

func (c *Client) info() int {//c Client - 리시버, c의 값을 바꿈
	c.width = 10
}

2.별칭 리시버 타입

type IntTest int

func (i IntTest) add(num int) int {
	return int(i) + num
}

func main() {
	var i IntTest = 1
    fmt.Println(i.add(10))
    
    var num int = 20
    fmt.Println(IntTest(num).add(3))
}

3.포인터 메소드 and 값 타입 메소드

(1)포인터 메소드 - 포인터 메소드를 호출하면 포인터가 가리키고 있던 메모리 주솟값 복사

(2)값 타입 메소드 - 메소드 호출 시 리시버 타입의 모든 값 복사

type Client struct {
	Name	string
   	ID		string
}

//포인터 메소드
func (c *Client) SetName(name string) {
	c.Name = name
}

//값 타입 메소드
func (c Client) SetNameByValue(name string) {
	c.Name = name
}

//값 타입 메소드(변경된 값 리턴)
func (c Client) SetNameByValueReturn(name string) Client {
	c.Name = name
    return c
}

func main() {
	var c Client
    c.SetName("genie")//(*c).SetName()으로 호출해야되지만 Go언어에서 자동으로 c의 값으로 변환하여 호출
   	fmt.Println(c.Name)//genie
    c.SetNameByValue("hi")
    fmt.Println(c.Name)//genie - 값이 복사된 후 할당하지 않았기 때문에 c의 값 변경 X
    c = c.SetNameByValueReturn("geniebabo")
    fmt.Println(c.Name)//geniebabo
728x90
반응형