소프트웨어를 설계할 때 "상속보다 구성" 원칙에 따라 코드가 더 유연하고 유지 관리하기 쉬운 경우가 많습니다. 객체 지향 디자인에 대한 독특한 접근 방식을 갖춘 Go는 상속보다는 구성에 크게 의존합니다. 그 이유를 살펴보겠습니다.
기존 OOP 언어에서는 상속을 통해 한 클래스가 다른 클래스의 동작과 속성을 상속받을 수 있지만 이로 인해 경직되고 변경하기 어려운 계층 구조가 발생할 수 있습니다. 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") }
여기:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!