개발 지식

개발 지식

Go 인터페이스는 덕 타이핑이라고? 그게 함정이 될 수도 있다

페이지 정보

profile_image
영삼이
0건 129회 25-03-28 15:06

본문

✅ 인터페이스는 덕 타이핑이라고? 그게 함정이 될 수도 있다

타입이 맞는다고 진짜 같은 건 아니다

Go 인터페이스는 “구현이 곧 만족”이라는 덕 타이핑(duck typing) 기반이다:

type Reader interface {
	Read(p []byte) (n int, err error)
}

함수를 구현만 하면 자동으로 해당 인터페이스를 만족한다:

type MyReader struct{}

func (m MyReader) Read(p []byte) (int, error) {
	return 0, nil
}

❌ 문제 상황: 인터페이스를 지나치게 일반화할 때

func Do(r interface{}) {
	// 어떤 타입인지 알 수 없음
}
  • 타입 단언이나 리플렉션 없이 작업이 어려움

  • 실제로는 타입 불명 상태의 값이 많아져

  • 런타임 에러 발생 가능성 증가


✅ 해결: 인터페이스는 작게 쪼개고, 구체적으로 쓰기

type JSONSerializable interface {
	ToJSON() ([]byte, error)
}

또는 구체 타입도 허용:

func Save(u *User) // 명확하고 안전함

✔️ 인터페이스는 유연하지만,
설계 없이 남발하면 디버깅 지옥이 된다.
작고 명확한 인터페이스를 정의하는 게 고수의 설계다.

댓글목록

등록된 댓글이 없습니다.