PHpullh
학습 라이브러리/Go/인터페이스 합성

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의 "작은 인터페이스 원칙"의 핵심 패턴입니다.

인터페이스 합성 학습 시 주의할 점은 무엇인가요?

너무 큰 인터페이스를 정의하면 구현하기 어렵고 모킹도 힘듭니다. 필요한 메서드만 포함하는 작은 인터페이스를 합성하세요.