"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go는 전통적인 메커니즘 없이 어떻게 다형성을 달성합니까?

Go는 전통적인 메커니즘 없이 어떻게 다형성을 달성합니까?

2024년 11월 17일에 게시됨
검색:555

How Does Go Achieve Polymorphism Without Traditional Mechanisms?

Go 언어의 다형성 탐구

객체 지향 프로그래밍에서 다형성을 사용하면 객체가 클래스에 따라 다양한 동작을 나타낼 수 있습니다. 하지만 Go에서는 다형성 개념이 전통적인 의미로 구현되지 않습니다. 이에 대한 이유를 살펴보고 Go에서 유사한 기능을 달성하는 방법을 살펴보겠습니다.

Go에 전통적인 다형성이 부족한 이유

Go는 전통적인 객체 지향 언어가 아닙니다. 다음을 사용하여 다른 접근 방식을 채택합니다:

  • 구성: 다른 개체 또는 인터페이스로 구성된 개체.
  • 인터페이스: 정의하는 계약 특정 유형에 대한 메서드 및 동작.

객체 지향 언어와 달리 Go는 메서드 재정의 또는 가상 메서드를 지원하지 않습니다. 이를 통해 Go는 더 높은 수준의 유형 안전성을 유지할 수 있습니다.

컴포지션 및 인터페이스를 사용하여 다형성 구현

Go에서 다형성과 유사한 동작을 달성하려면 다음 기술을 사용할 수 있습니다.

  1. 공통 인터페이스 만들기: 파생 유형에서 구현하려는 일반적인 동작이나 메서드를 나타내는 인터페이스를 정의합니다.
  2. 인터페이스 구현 : 각각 고유한 구현을 제공하는 파생 형식에서 인터페이스의 메서드를 구현합니다.
  3. 컴포지션 사용: 공통 인터페이스를 필드로 사용하여 파생 형식을 구성합니다. 이를 통해 모든 파생 유형을 공통 인터페이스의 인스턴스로 처리할 수 있습니다.

:

package main

import "fmt"

// Common interface
type Foo interface {
    printFoo()
}

// Derived type with unique implementation
type FooImpl struct{}

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

// Derived type composed using the common interface
type Bar struct {
    FooImpl
}

// Function returning the common interface
func getFoo() Foo {
    return Bar{}
}

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

이 예에서 Foo는 공통 인터페이스이고 FooImpl은 자체 구현이 있는 파생 유형이며 Bar는 FooImpl을 사용하여 구성된 파생 유형입니다. getFoo() 함수는 Foo 인터페이스의 인스턴스를 반환하므로 다양한 파생 유형을 하나의 인터페이스 유형으로 처리할 수 있습니다.

이 접근 방식은 다양한 파생 유형을 인스턴스로 처리할 수 있도록 하여 Go에서 다형성 형태를 제공합니다. 공통 인터페이스입니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3