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

영삼이
본문
✅ 인터페이스는 덕 타이핑이라고? 그게 함정이 될 수도 있다
타입이 맞는다고 진짜 같은 건 아니다
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) // 명확하고 안전함
✔️ 인터페이스는 유연하지만,
설계 없이 남발하면 디버깅 지옥이 된다.
작고 명확한 인터페이스를 정의하는 게 고수의 설계다.
- 이전글구조체 포인터냐 값이냐, 선택이 중요하다 25.03.28
- 다음글for-range에서 slice를 수정하면 생기는 이상한 버그 25.03.28
댓글목록
등록된 댓글이 없습니다.