>  기사  >  백엔드 개발  >  Go는 상속 없이 어떻게 다형성을 달성하나요?

Go는 상속 없이 어떻게 다형성을 달성하나요?

DDD
DDD원래의
2024-11-06 06:45:02173검색

How does Go Achieve Polymorphism without Inheritance?

Go lang의 다형성

알다시피 Go는 상속을 통한 전통적인 객체 지향 개념인 다형성을 지원하지 않습니다. 그러나 인터페이스와 구성을 사용하여 비슷한 결과를 얻을 수 있는 다른 방법도 있습니다.

인터페이스 및 구성

Go에서 인터페이스는 유형이 구현해야 하는 메서드를 지정하는 계약을 정의합니다. . 컴포지션을 사용하면 다른 유형을 삽입하여 새로운 유형을 만들 수 있습니다. 인터페이스와 구성을 결합하면 다형성 형태를 얻을 수 있습니다.

예를 들어 다음 코드를 생각해 보세요.

<code class="go">package main

import "fmt"

type Foo interface {
    printFoo()
}

type FooImpl struct {
}

type Bar struct {
    FooImpl
}

type Bar2 struct {
    FooImpl
}

func (f FooImpl) printFoo() {
    fmt.Println("Print Foo Impl")
}

func getFoo() Foo {
    return Bar{}
}

func main() {
    fmt.Println("Hello, playground")
    b := getFoo()
    b.printFoo()
}</code>

이 예에서는

  • Foo 인터페이스는 printFoo 메소드를 정의합니다.
  • FooImpl은 printFoo 메소드를 사용하여 Foo 인터페이스를 구현합니다.
  • Bar는 FooImpl을 내장하므로 Foo 인터페이스를 구현합니다.
  • Bar2는 FooImpl을 내장하고 또한 Foo 인터페이스를 구현합니다.
  • getFoo는 Foo 유형의 값을 반환합니다. Bar와 Bar2 모두 Foo 인터페이스를 구현하므로 Bar2는 getFoo에 대한 유효한 반환 값입니다.
  • main은 getFoo를 호출하여 Foo 값을 얻은 다음 해당 값에 대해 printFoo 메서드를 호출합니다.

이 코드를 실행하면 다음 출력이 표시됩니다.

Hello, playground
Print Foo Impl

이는 Go에서 인터페이스와 구성을 사용하여 다형성 형태를 달성하는 방법을 보여줍니다. 인터페이스를 정의하면 다양한 유형이 공통 메소드 세트를 공유하도록 할 수 있습니다. 유형을 포함하면 여러 다른 유형의 기능을 결합하는 새로운 유형을 만들 수 있습니다. 이를 통해 다양한 유형을 동일한 방식으로 처리하는 코드를 작성할 수 있습니다.

위 내용은 Go는 상속 없이 어떻게 다형성을 달성하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.