Go에서 상속보다 합성

Mary-Kate Olsen
풀어 주다: 2024-10-30 12:24:02
원래의
429명이 탐색했습니다.

Composition Over Inheritance in Go

소프트웨어를 설계할 때 "상속보다 구성" 원칙에 따라 코드가 더 유연하고 유지 관리하기 쉬운 경우가 많습니다. 객체 지향 디자인에 대한 독특한 접근 방식을 갖춘 Go는 상속보다는 구성에 크게 의존합니다. 그 이유를 살펴보겠습니다.

Go가 작곡을 선호하는 이유

기존 OOP 언어에서는 상속을 통해 한 클래스가 다른 클래스의 동작과 속성을 상속받을 수 있지만 이로 인해 경직되고 변경하기 어려운 계층 구조가 발생할 수 있습니다. Go는 상속을 완전히 피하고 대신 더 작고 집중된 구성 요소를 결합하여 유형을 구축하는 구성을 장려합니다.

구성 작업

엔지니어, 관리자, 인턴 등 다양한 유형의 직원으로 구성된 회사를 모델링한다고 상상해 보세요. 복잡한 클래스 계층 구조를 만드는 대신 특정 동작을 독립적인 유형으로 정의한 후 구성하겠습니다.

예: Go에서의 작업자 행동

package main

import "fmt"

type Worker interface {
    Work()
}

type Payable struct {
    Salary int
}

func (p Payable) GetSalary() int {
    return p.Salary
}

type Manageable struct{}

func (m Manageable) Manage() {
    fmt.Println("Managing team")
}

type Engineer struct {
    Payable
}

func (e Engineer) Work() {
    fmt.Println("Engineering work being done")
}

type Manager struct {
    Payable
    Manageable
}

func (m Manager) Work() {
    fmt.Println("Managerial work being done")
}
로그인 후 복사

여기:

  • 엔지니어와 관리자는 Payable을 내장하여 급여를 제공합니다.
  • Manager에는 Manageable 기능이 포함되어 팀 관리 기능도 제공됩니다.
  • 각 유형은 Work()를 개별적으로 구현하여 Worker 인터페이스를 만족시킵니다.

구성의 이점

  • 단순성: 각 동작은 해당 구조체에 캡슐화되므로 쉽게 확장할 수 있습니다.
  • 유연성: 기존 코드를 손상시키지 않고 새로운 유형이나 동작을 추가할 수 있습니다.
  • 재사용성: 동작은 모듈식이므로 다양한 방식으로 쉽게 결합할 수 있습니다.

컴포지션과 함께 인터페이스 사용

Go에서는 인터페이스와 구성이 함께 작동하여 상속 없이 다형성을 허용합니다. 단일 기능으로 여러 작업자 유형을 처리하는 방법은 다음과 같습니다.

func DescribeWorker(w Worker) {
    w.Work()
}

func main() {
    engineer := Engineer{Payable{Salary: 80000}}
    manager := Manager{Payable{Salary: 100000}, Manageable{}}
    DescribeWorker(engineer)
    DescribeWorker(manager)
}
로그인 후 복사

Go가 상속보다 구성을 선호하는 것은 단순한 언어적 특성이 아닙니다. 변화에 적응할 수 있는 더 깔끔하고 모듈화된 코드를 장려합니다. 엄격한 계층 구조 대신 코드베이스를 민첩하고 유지 관리하기 쉽게 유지하는 유연하고 재사용 가능한 구성 요소를 얻을 수 있습니다.

위 내용은 Go에서 상속보다 합성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿