GO · 함수
메서드 세트와 인터페이스 충족
값 타입과 포인터 타입의 메서드 세트가 다릅니다. 인터페이스 충족 여부에 직접 영향을 미칩니다.
함수중급method-setinterfacepointer-receivervalue-receiver
핵심 설명
값 타입과 포인터 타입의 메서드 세트가 다릅니다. 인터페이스 충족 여부에 직접 영향을 미칩니다.
Go code
package main
import "fmt"
type Writer interface {
Write(data string)
}
type Logger struct {
Prefix string
}
// 포인터 리시버 메서드
func (l *Logger) Write(data string) {
fmt.Printf("[%s] %s\n", l.Prefix, data)
}
func process(w Writer) {
w.Write("처리 완료")
}
func main() {
l := &Logger{Prefix: "APP"}
process(l) // OK: *Logger는 Writer 충족
// l2 := Logger{Prefix: "APP"}
// process(l2) // 컴파일 에러!
// Logger 값은 *Logger의 메서드 세트를 포함하지 않음
// 값 리시버 메서드는 값과 포인터 모두 충족
// 포인터 리시버 메서드는 포인터만 충족
}학습 팁
값 리시버로 정의하면 값과 포인터 모두 인터페이스를 충족합니다. 포인터 리시버는 포인터만 충족하므로 주의하세요.
주의할 점
포인터 리시버 메서드를 가진 타입을 값으로 인터페이스에 전달하면 컴파일 에러가 발생합니다. 항상 &로 포인터를 전달하세요.
자주 묻는 질문
메서드 세트와 인터페이스 충족란 무엇인가요?
값 타입과 포인터 타입의 메서드 세트가 다릅니다. 인터페이스 충족 여부에 직접 영향을 미칩니다.
메서드 세트와 인터페이스 충족 학습 시 주의할 점은 무엇인가요?
포인터 리시버 메서드를 가진 타입을 값으로 인터페이스에 전달하면 컴파일 에러가 발생합니다. 항상 & 로 포인터를 전달하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.