Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 리뷰
- JavaScript
- c++
- Callback
- tcp
- go언어
- 책
- go
- C
- install
- windows
- GO 언어
- Linux
- channel
- window
- write
- Close
- FOR
- json
- mutex
- Golang
- 영화
- http
- API
- bitcoin
- range
- package
- File
- Sync
- Python
Archives
- Today
- Total
Code Habit
Go ) 덕 타이핑 본문
각 값이나 인스턴스의 실제 타입은 상관하지 않고 구현된 메서드로만 타입을 판단하는 방식을 덕 타이핑(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 메서드만 가졌다면 모두 같은 인터페이스로 처리할 수 있다.
실행 결과
오리 : 꽥 ~ !
오리 : 깃털
사람 : 꽥 ~ !
사람 : 깃털
|