개요
- 타입이 가져야하는 메소드들의 집합
- 타입 단언(type assertion)
- 인터페이스를 특정 타입으로 변환
- 두번째 반환 값을 통해 변환 성공 여부 확인
- Stringer 인터페이스
- 문자열을 반환하는 String() 메소드 정의
예제
- 코드
package main
import "fmt"
type polygon interface {
getArea() int
}
type triangle struct {
}
func (t *triangle) getArea() int {
return 1
}
func (t *triangle) String() string {
return "triangle"
}
func (t *triangle) triangleFunc() {
println("triangleFunc() call")
}
type square struct {
}
func (s *square) getArea() int {
return 2
}
func (s *square) String() string {
return "square"
}
func (s *square) squareFunc() {
println("squareFunc() call")
}
func job(pg polygon) {
fmt.Println(pg)
println(pg.getArea())
t, ok := pg.(*triangle)
if ok {
t.triangleFunc()
}
s, ok := pg.(*square)
if ok {
s.squareFunc()
}
}
func main() {
job(&triangle{})
println("\n------\n")
job(&square{})
}
- 실행 결과
triangle
1
triangleFunc() call
------
square
2
squareFunc() call