GO · 함수
인터페이스 합성
작은 인터페이스를 합성하여 큰 인터페이스를 만듭니다. Go의 "작은 인터페이스 원칙"의 핵심 패턴입니다.
함수중급interface-compositionioreaderwriter
핵심 설명
작은 인터페이스를 합성하여 큰 인터페이스를 만듭니다. Go의 "작은 인터페이스 원칙"의 핵심 패턴입니다.
Go code
package main
import "fmt"
type Reader interface {
Read(p []byte) (n int, err error)
}
type Writer interface {
Write(p []byte) (n int, err error)
}
type Closer interface {
Close() error
}
// 인터페이스 합성
type ReadWriter interface {
Reader
Writer
}
type ReadWriteCloser interface {
Reader
Writer
Closer
}
// 구현
type Buffer struct {
data []byte
}
func (b *Buffer) Read(p []byte) (int, error) {
n := copy(p, b.data)
return n, nil
}
func (b *Buffer) Write(p []byte) (int, error) {
b.data = append(b.data, p...)
return len(p), nil
}
func main() {
var rw ReadWriter = &Buffer{}
rw.Write([]byte("Hello"))
buf := make([]byte, 5)
rw.Read(buf)
fmt.Println(string(buf))
}학습 팁
Go 표준 라이브러리는 1-2개 메서드의 작은 인터페이스를 선호합니다. io.Reader, io.Writer가 대표적입니다.
주의할 점
너무 큰 인터페이스를 정의하면 구현하기 어렵고 모킹도 힘듭니다. 필요한 메서드만 포함하는 작은 인터페이스를 합성하세요.
자주 묻는 질문
인터페이스 합성란 무엇인가요?
작은 인터페이스를 합성하여 큰 인터페이스를 만듭니다. Go의 "작은 인터페이스 원칙"의 핵심 패턴입니다.
인터페이스 합성 학습 시 주의할 점은 무엇인가요?
너무 큰 인터페이스를 정의하면 구현하기 어렵고 모킹도 힘듭니다. 필요한 메서드만 포함하는 작은 인터페이스를 합성하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.