PHpullh
학습 라이브러리/Go/메서드 세트와 인터페이스 충족

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의 메서드 세트를 포함하지 않음

	// 값 리시버 메서드는 값과 포인터 모두 충족
	// 포인터 리시버 메서드는 포인터만 충족
}

학습 팁

값 리시버로 정의하면 값과 포인터 모두 인터페이스를 충족합니다. 포인터 리시버는 포인터만 충족하므로 주의하세요.

주의할 점

포인터 리시버 메서드를 가진 타입을 값으로 인터페이스에 전달하면 컴파일 에러가 발생합니다. 항상 &로 포인터를 전달하세요.

자주 묻는 질문

메서드 세트와 인터페이스 충족란 무엇인가요?

값 타입과 포인터 타입의 메서드 세트가 다릅니다. 인터페이스 충족 여부에 직접 영향을 미칩니다.

메서드 세트와 인터페이스 충족 학습 시 주의할 점은 무엇인가요?

포인터 리시버 메서드를 가진 타입을 값으로 인터페이스에 전달하면 컴파일 에러가 발생합니다. 항상 & 로 포인터를 전달하세요.