컴퓨터 공학/Go

덕 타이핑 예시

혼새미로 2020. 2. 1. 23:31
반응형
package main

import "fmt"

// Duck 오리 구조체
type Duck struct {
}

func (d Duck) quack() {
	fmt.Println("꽥~!")
}

func (d Duck) feathers() {
	fmt.Println("오리는 흰색과 회색 털을 가지고 있습니다.")
}

// Person 사람 구조체
type Person struct {
}

func (p Person) quack() {
	fmt.Println("사람은 오리 흉내를 냅니다. 꽥~!")
}

func (p Person) feathers() {
	fmt.Println("사람은 땅에서 깃털을 주워서 보여줍니다.")
}

// Quacker 꽥 인터페이스
type Quacker interface {
	quack()
	feathers()
}

func inTheForest(q Quacker) {
	q.quack()
	q.feathers()
}

func main() {
	var donald Duck // 오리 인스턴스 생성
	var john Person // 사람 인스턴스 생성

	inTheForest(donald)
	inTheForest(john)
}


Quacker 인터페이스는 quack, feathers 함수를 정의하고 있다. 그리고 오리와 사람 모두 quack, feathers 함수를 구현했다. 실제로 사용할 때는 다음과 같이 inTheForest 함수에서 Quacker 인터페이스를 매개변수로 받는다. 여기에 오리든 사람이든 inTheForest 함수에 넣을 수 있으며 quack, feathers 메서드를 호출한다.


출처: [책] 가장 빨리 만나는 Go언어


반응형

'컴퓨터 공학 > Go' 카테고리의 다른 글

Go 언어의 활용범위  (0) 2020.01.29