# 맨 아래 코드 먼저 보시고 설명 읽으시길 추천!!!
메서드 집합(method sets)
값의 관점에서 본 메서드 집합 | |
값 | 메서드 수신자 |
T | (t T) |
*T | (t *T) |
- 설명
T (t T) : 값 u는 T이고, notify메서드에서의 수신자 (u user)는 (t T)를 뜻한다.
*T (t T) 그리고 (t *T) : &u는 *T이고, notify메서드의 수신자 (u *user) 또는 (u user)는 (t T) 와 (t *T)를 뜻한다.
수신자의 관점에서 본 메서드 집합 | |
메서드 수신자 | 값 |
(t T) | T와 *T |
(t *T) | *T |
-설명
(t T) T와 *T : notify메서드에서의 수신자 (u user)는 (t T)이고, u와 &u는 T와 *T를 뜻한다.
(t *T) *T : notify메서드의 수신자 (u *user)는 (t *T)이고, &u는 *T를 뜻한다.
package main
import "fmt"
type notifier interface {
notify()
}
type user struct {
name string
email string
}
func (u *user) notify() { // (u *user) 수신자
fmt.Printf("사용자에게 메일을 전송합니다: %s<%s>\n", u.name, u.email)
}
func sendNotification(n notifier) {
n.notify()
}
func main() {
u := user{"Bill", "bill@email.com"} // u값
sendNotification(u) //&u로 전달해야 컴파일 가능
}
현재 이코드는 작동하지 않는데 이유는 notifier interface가 nofity() 메서드를 가지고 있는데
notify메서드의 수신자는 u *user(포인터 수신자)이다. 하지만 main에서 sendNotification 인수로 &u가 아닌 u를 전달하고 있다.
위의 메서드 집합에 따르면 메서드 수신자 (u *user)는 포인터 이므로 &u와 같이 주소만를 전달할 수 있다.
출처 : 책. Go 인 액션 132쪽 메서드 집합
'프로그래밍 > Go(golang) 프로그래밍' 카테고리의 다른 글
Go[golang] Youtube api를 사용하여 공개 재생목록 가져오기 1편(API 키 준비) (0) | 2023.07.11 |
---|---|
Go[golang] 제네릭 tilde(~) (0) | 2022.12.22 |
Goland에서 *File.Close() 메소드를 찾지 못하는 문제 (0) | 2022.10.14 |
Go[golang] 변수 추론(int, float64) (0) | 2022.07.04 |
Go[golang] 변수 기본값 (0) | 2022.06.30 |