Go의 인터페이스는 다형성을 지원하므로 해당 인터페이스를 구현하는 모든 유형에서 작동할 수 있는 일반 유형을 생성할 수 있습니다. 그러나 Java나 C와 같은 언어와 달리 Go는 다중 상속을 지원하지 않습니다. 이는 상속 없이 두 개의 인터페이스를 "구현해야 하는" 유형을 사용하는 것과 같은 특정 디자인 패턴을 달성하는 방법에 대한 의문을 제기합니다.
구조체 유형을 숨기고 표현하려면 인터페이스로서:
type Card interface { GetFace() string GetSuit() string }
또한 Card 인터페이스에 대해 String() 메소드를 정의하고 싶지만 인터페이스를 전달할 수 없기 때문에 이는 문제가 됩니다. String() 메서드 구현.
구조체를 숨기고 인터페이스만 내보내는 안티 패턴을 사용하는 대신 다음 접근 방식을 고려하세요.
외부 수정을 방지하기 위해 구조체 필드를 숨기고 포인터를 다음으로 내보냅니다. it:
type Card struct { // ... struct fields here } func NewCard(...) *Card { // ... }
카드 구조체에 대한 포인터에 대한 String() 메서드 정의:
func (c *Card) String() string { // ... }
이 접근 방식 다음을 수행할 수 있습니다.
"인터페이스 숨기기" 패턴이 매력적으로 보일 수 있지만 캡슐화가 제대로 되지 않고 문서화가 손상되며 불필요한 복잡성이 발생할 수 있습니다. 포인터를 구조체로 내보내고 포인터 유형에 String() 메서드를 구현하는 권장 접근 방식은 더 깨끗하고 효과적인 솔루션을 제공합니다.
위 내용은 다중 상속 없이 Go 인터페이스에서 메소드를 어떻게 효과적으로 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!