Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

Code Habit

Go ) 덕 타이핑 본문

카테고리 없음

Go ) 덕 타이핑

코드베어 2020. 6. 8. 09:53

각 값이나 인스턴스의 실제 타입은 상관하지 않고 구현된 메서드로만 타입을 판단하는 방식을 덕 타이핑(Duck typing)이라 한다. 이는 go 언어에만 국한된 것은 아니고 다른 언어에도 공용되는 개념이다. ex ) c++의 상속개념

 

사용 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package main
 
import "fmt"
 
type Duck struct {
}
 
func (d Duck) quack() {        // 오리의 quack 메서드 정의
    fmt.Println("오리 : 꽥 ~ !")
}
 
func (d Duck) feathers() {    // 오리의 feathers 메서드 정의
    fmt.Println("오리 : 깃털")
}
 
type Person struct {    // 사람(Person) 구조체 정의
}
 
func (p Person) quack() {    // 사람의 quack 메서드 정의
    fmt.Println("사람 : 꽥 ~ !")
}
 
func (p Person) feathers() {    // 사람의 feathers 메서드 정의
    fmt.Println("사람 : 깃털")
}
 
type Quacker interface {    // quack, feathers 메서드를 가지는 Quacker 인터페이스 정의
    quack()
    feathers()
}
 
func inTheForest(q Quacker) {
    q.quack()
    q.feathers()
}
 
func main() {
    var donald Duck // 오리 인스턴스 생성
    var john Person // 사람 인스턴스 생성
    
    inTheForest(donald)    // 인터페이스를 통하여 오리의 quack, feather 메서드 호출
    inTheForest(john)    // 인터페이스를 통하여 사람의 quack, feather 메서드 호출
}

오리든 사람이든 상관없이 quack과 feather 메서드만 가졌다면 모두 같은 인터페이스로 처리할 수 있다.

 

실행 결과

오리 : 꽥 ~ !
오리 : 깃털
사람 : 꽥 ~ !
사람 : 깃털