728x90
구조체가 속성의 집합이라면, 인터페이스는 기능의 집합입니다.
인터페이스는 구현할 메소드를 묶어 놓은 것입니다.
인터페이스를 사용하는 구조체는 인터페이스를 실제 구현해야합니다.
GO에서는 명시적으로 인터페이스를 구현하는 키워드는 없습니다.
구조체가 사용할 인터페이스를 모두 구현하면 됩니다. 이를 덕타이핑이라고 합니다.
덕 타이핑은 객체가 어떤 타입에 걸맞은 변수와 메소드를 지니면 객체를 해당 타입에 속하는 것으로 간주한다.
"만약 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥거리는 소리를 낸다면 나는 그 새를 오리라고 부를 것이다."
// 인터페이스
type 인터페이스명 interface {
매서드 집합
}
-------
// 인터페이스 정의
type Duck interface {
DuckSound() string
DuckWalk() string
isSwim()
}
// 구현할 구조체
type Bird struct {
name string
}
// 인터페이스 구현
func (b Bird) DuckSound() string {
return "Quaaaaaack!"
}
func (b Bird) DuckWalk() string {
return "Waddle"
}
func (b Bird) isSwim() string {
if b.name == "duck" {
return "can"
} else {
return "can't"
}
}
// 사용
func main() {
duck := Bird{name: "duck"}
fmt.Printf("Ducks %s, %s, and %s swim. \n", duck.DuckSound(), duck.DuckWalk(), duck.isSwim())
}
-------
// 실행
$ go run ./main.go
Ducks Quaaaaaack!, Waddle, and can swim.
비어있는 인터페이스를 사용하면 어떤 값이든 받을 수 있습니다.
func typeCheck(i interface{}) {
fmt.Printf("%T \n", i) //타입을 출력
}
// 사용
func main() {
typeCheck(1)
}
-------
// 결과
$ go run ./main.go
int
728x90
'IT > GO' 카테고리의 다른 글
Go 언어 스터디 - 함수의 기능(가변인자) (0) | 2023.07.16 |
---|---|
Go 언어 스터디 - 함수의 기능(defer) (0) | 2023.07.16 |
GO 언어 스터디 - 메서드 (0) | 2023.07.15 |
Go 언어 스터디 - 함수 (0) | 2023.07.15 |