GO · 구조체/인터페이스
인터페이스 설계 원칙
Go의 암시적 인터페이스 구현을 활용한 설계 원칙. "소비자가 인터페이스를 정의한다"가 핵심입니다.
구조체/인터페이스중급interface-designconsumersmall-interfaceimplicit
핵심 설명
Go의 암시적 인터페이스 구현을 활용한 설계 원칙. "소비자가 인터페이스를 정의한다"가 핵심입니다.
Go code
package main
import "fmt"
// 원칙 1: 작은 인터페이스
type Saver interface {
Save(data []byte) error
}
// 원칙 2: 소비자 측에서 정의
// 패키지 A가 인터페이스를 정의, 패키지 B가 구현
type Notifier interface {
Notify(msg string) error
}
// 구현체들 — 인터페이스를 몰라도 됨
type FileSaver struct{ Path string }
func (f FileSaver) Save(data []byte) error {
fmt.Printf("파일 저장: %s (%d bytes)\n", f.Path, len(data))
return nil
}
type SlackNotifier struct{ Webhook string }
func (s SlackNotifier) Notify(msg string) error {
fmt.Printf("Slack 알림: %s\n", msg)
return nil
}
// 인터페이스를 받아 사용
func backup(s Saver, n Notifier) {
s.Save([]byte("backup data"))
n.Notify("백업 완료")
}
func main() {
backup(
FileSaver{Path: "/backup"},
SlackNotifier{Webhook: "https://hooks.slack.com/..."},
)
}학습 팁
"인터페이스는 생산자가 아닌 소비자가 정의한다"가 Go의 핵심 설계 원칙입니다. 필요한 메서드만 포함하세요.
주의할 점
구현체 패키지에서 인터페이스를 정의하고 반환하는 것은 Java 스타일입니다. Go에서는 호출하는 쪽에서 필요한 인터페이스를 정의하세요.
자주 묻는 질문
인터페이스 설계 원칙란 무엇인가요?
Go의 암시적 인터페이스 구현을 활용한 설계 원칙. "소비자가 인터페이스를 정의한다"가 핵심입니다.
인터페이스 설계 원칙 학습 시 주의할 점은 무엇인가요?
구현체 패키지에서 인터페이스를 정의하고 반환하는 것은 Java 스타일입니다. Go에서는 호출하는 쪽에서 필요한 인터페이스를 정의하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.